当前位置: 首页 > 面试题库 >

Swift:测试nil的可选项

班建义
2023-03-14
问题内容

我正在使用Xcode 6 Beta4。我有这种奇怪的情况,我无法弄清楚如何适当地测试可选项。

如果我有可选的xyz,则是正确的测试方法:

if (xyz) // Do something

要么

if (xyz != nil) // Do something

这些文档说是第一种方法,但是我发现有时第二种方法是必需的,并且不会生成编译器错误,但是有时,第二种方法会生成编译器错误。

我的具体示例是使用桥接到swift的GData XML解析器:

let xml = GDataXMLDocument(
    XMLString: responseBody,
    options: 0,
    error: &xmlError);

if (xmlError != nil)

在这里,如果我刚做过:

if xmlError

它将始终返回true。但是,如果我这样做:

if (xmlError != nil)

然后它就起作用了(就像在Objective-C中一样)。

GData XML以及它处理我缺少的可选内容的方式吗?


问题答案:

在Xcode Beta 5中,它们不再允许您执行以下操作:

var xyz : NSString?

if xyz {
  // Do something using `xyz`.
}

这会产生一个错误:

不符合协议“ BooleanType.Protocol”

您必须使用以下形式之一:

if xyz != nil {
   // Do something using `xyz`.
}

if let xy = xyz {
   // Do something using `xy`.
}


 类似资料:
  • 问题内容: 我有一本有值的字典,我叫它来填充一个字段 如代码中所示,userdata [“ email”]存在并有一个值,由println打印,无论如何,在下一行中,我引发了一个nil可选异常(甚至不使用默认的“”值) 我看不到我在做什么错 问题答案: 它是文本字段的出口,但在prepareForSegue函数中似乎没有解包 那句话暴露出你的误解。事情按顺序发生,我在这里讨论:https : //

  • 问题内容: Swift中的函数是否可以具有参数?我正在尝试这样做: …但是当我尝试调用它并通过时,它给了我一个奇怪的编译错误: 我不明白为什么我的类已经被声明为可选的,所以必须遵循某些特殊的协议。 问题答案: 它不会编译,因为该函数需要引用,但是您通过了。这个问题与可选无关。 通过用声明参数意味着您将在函数体内为其分配一些值。如何分配价值? 你需要这样称呼它 如果您了解C ,则这是代码的C 版本,

  • 问题内容: 我正在使用2014年WWDC教程408:使用XCode Beta 3(30分钟)的Swift Playgrounds。自Beta 2起,Swift语法已更改。 为什么我不能以这种方式修改可变整数数组? 问题答案: 因为子例程参数是隐式定义的,因此是不可变的。尝试将声明更改为: 以及对以下内容的调用: 您也可以使用,但这仅允许在子例程中修改数组。Beta 3的最大变化是使数组真正按值传递

  • 可选类型“Bool”不能用作布尔值;改为测试“!=nil” 我在第一个if中得到了一个错误,通过替换if条件(之后的

  • 我是个新手,这可能是个很简单的错误,但我需要一个很好的解释。我有一个Xcode错误 可选类型'Bool'不能用作布尔值;改为测试'!=nil' 对于第二行<代码> segue 我正在观看YouTube视频,以遵循待办事项列表的步骤。

  • 请原谅我的无知,我恐怕错过了一些基本的选项理解。我的印象是(隐式展开的可选指示符)保证该类型的变量不为零。然而,这个非常简单的Apple API很少会返回我。 这是一个意外的错误还是Optionals规范的一部分?因为如果这是规范的一部分,我不明白为什么会有选项,而不是变量可以存在或。