我注意到 swift 中有一个奇怪的行为。以下代码将按预期打印"未找到"。
import Cocoa
var array = [["one":"1"]]
for element in array {
if let check = element["two"] {
print(check)
} else {
print("Not found")
}
}
稍微将代码更改为
import Cocoa
var array : [AnyObject]?
array = [["one":"1"]]
for element in array! {
if let check = element["two"] {
print(check)
} else {
print("Not found")
}
}
将打印"nil" - 这不是我所期望的,因为我认为在 swift 中 nil 是一个"未设置"而不是可打印的对象。
我错过了什么吗?谢谢!
在第二种情况下,您实际上是在创建一个嵌套的可选,这通常不是一个好主意(它只会导致混乱,我不知道为什么编译器坦率地允许它)。 如果您输入:
let foo = element["two"]
并检查foo
的类型,您会发现它是AnyObject?!
。 因此,它是可选的,没有将任何值包装在可选中。 这具有使您的if/let
语句解开第一个可选包以为您提供第二个可选(即nil
)的效果。