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这不是正常的展开,而是强制展开,如果找不到密钥,会导致应用程序崩溃。答案中应该明确指出这一点,为实现相同结果提供了一种更安全的途径(如可选绑定)。谢谢,一开始我应该更清楚。更新。如果控制台仅打印值,您如何区分字符串类型和可选类型之间的差异?