为什么会有?在if-let语句中标记以查看可选的值

时间:2015-03-27 16:14:09

标签: swift

我正在阅读以下书籍,第32页上有一段代码片段。 2014年12月:第一版。

  

与CocoaJonathon Manning的快速发展,巴黎Buttfield-Addison,   和Tim Nugent

我知道我们可以使用?使vairbale可选,并!在Swift中展开可选的vairbale

var str: String? = "string"
if let theStr = str? {
    println("\(theStr)")
} else {
    println("nil")
}

为什么我们需要?这一行if let theStr = str?看起来工作得很好而没有任何区别。


enter image description here

2 个答案:

答案 0 :(得分:2)

你不需要它,也不应该拥有它。可选绑定评估可选项。如果它是零,则停止。如果它不是nil,它会将值赋给您所需的变量,然后在if语句的大括号内执行代码。

编辑:

自首次以测试形式发布以来,该语言略有变化。我的猜测是?曾经被要求。

我从Github使用的一些示例项目无法编译,我必须编辑它们才能使它们工作。这可能是语法略有改变的示例。

答案 1 :(得分:1)

当前版本的Swift并不需要它,因为它是多余的,因为您的变量已经是可选的。

无论你在if语句中放入什么都必须是可选的,否则你会收到错误

  

条件绑定中的绑定值必须是可选类型

此外,如果要转换为类型,则需要使用as?强制转换为可选类型。

var str2: Any = ["some", "example"]

if let theStr = str2 as? [String] {
    println("\(theStr)")
} else {
    println("nil")
}