Iphone 为什么斯威夫特打印;可选(…)
如果以下代码运行Iphone 为什么斯威夫特打印;可选(…),iphone,swift,optional,Iphone,Swift,Optional,如果以下代码运行 var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"] print(airports["YYZ"]) 为什么控制台会打印 可选(“多伦多皮尔森”) 为什么它打印可选(带值)而不仅仅是值 为什么我需要在控制台中知道这一点?Swift对可能失败的操作有帮助。类似于airports[“XYZ”]的数组索引就是一个例子。如果找不到索引,它将失败。这代替了nil类型或异常 展开可选类型的最简单方法是使用感叹号,如:airp
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
print(airports["YYZ"])
为什么控制台会打印
可选(“多伦多皮尔森”)
为什么它打印可选(带值)而不仅仅是值
为什么我需要在控制台中知道这一点?Swift对可能失败的操作有帮助。类似于airports[“XYZ”]
的数组索引就是一个例子。如果找不到索引,它将失败。这代替了nil
类型或异常
展开可选类型的最简单方法是使用感叹号,如:airports[“XYZ”]代码>。如果该值为nil
,则会导致死机
您可以在Swift中链接选项类型上的方法,如果左侧值为nil
,则将提前退出到nil
,而不调用方法。当您在值和方法之间插入问号时,它会起作用,如下所示:airports[“XYZ”]?.method()
。由于该值为nil
,因此从不调用Method()
。这允许您延迟决定是否处理可选类型,并且可以稍微清理代码
要安全地使用可选类型而不惊慌失措,只需使用if
语句提供一个备用路径
if let x:String? = airports["XYZ"] {
println(x!)
} else {
println("airport not found")
}
这是一个比我的答案更好的解释+1这不是正常的展开,而是强制展开,如果找不到密钥,会导致应用程序崩溃。答案中应该明确指出这一点,为实现相同结果提供了一种更安全的途径(如可选绑定)。谢谢,一开始我应该更清楚。更新。如果控制台仅打印值,您如何区分字符串类型和可选类型之间的差异?