为什么 SWIFT 打印“可选(...)
Why does SWIFT print "Optional(...)
如果运行下面的代码
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
print(airports["YYZ"])
为什么控制台打印
Optional("Toronto Pearson")
为什么它打印 Optional( withValue ) 而不仅仅是值?
为什么我需要在控制台中知道这些信息?
Swift 有 optional types 可能失败的操作。像 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")
}
如果运行下面的代码
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
print(airports["YYZ"])
为什么控制台打印
Optional("Toronto Pearson")
为什么它打印 Optional( withValue ) 而不仅仅是值?
为什么我需要在控制台中知道这些信息?
Swift 有 optional types 可能失败的操作。像 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")
}