Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么会有这样的问题?在if-let语句中标记,以查看可选值是否有值_Swift - Fatal编程技术网

Swift 为什么会有这样的问题?在if-let语句中标记,以查看可选值是否有值

Swift 为什么会有这样的问题?在if-let语句中标记,以查看可选值是否有值,swift,Swift,我正在读下面这本书,第32页有一个代码片段。2014年12月:第一版 与CocoaJonathon Manning、Paris Buttfield Addison和, 还有蒂姆·纽金特 我知道我们可以使用?使vairbale成为可选的在Swift中打开可选vairbale var str: String? = "string" if let theStr = str? { println("\(theStr)") } else { prin

我正在读下面这本书,第32页有一个代码片段。2014年12月:第一版

与CocoaJonathon Manning、Paris Buttfield Addison和, 还有蒂姆·纽金特

我知道我们可以使用
使vairbale成为可选的
在Swift中打开可选vairbale

var str: String? = "string"
if let theStr = str? {
    println("\(theStr)")
} else {
    println("nil")
}
为什么我们需要
在这行
中,如果让theStr=str?
没有它似乎工作得很好,没有任何区别



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

编辑: 自首次以测试版形式发布以来,该语言略有变化。我猜是这样吗?过去是必须的


我从Github使用的一些示例项目无法编译,我不得不编辑它们以使其正常工作。这可能是一个语法略有变化的示例。

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

但是,在if-let语句中输入的任何内容都必须是可选的,否则将收到错误

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

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

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

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

你为什么认为你需要这么做?在if let?中,我正在阅读“与Cocoa Jonathon Manning、Paris Buttfield Addison和Tim Nugent合作的快速发展”这本书,它提供了一个示例if let str=str{println(“(str)”}@LeonardoSavioDabus,我知道这部作品。我的问题是为什么在可选绑定中需要
<代码>如果let newStr=str?{…}
您不需要为应用程序中的每个可选项创建第二个var。您知道在哪里可以找到更多关于
if let
语句的参考吗?并且,附加的
不会使代码至少在@X.Li使用官方文档时无法编译。苹果的iBook“Swift编程语言”中有一节介绍了可选绑定(这就是“if-let”构造的名称)。感谢您将答案扩展到类型转换