我注意到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" - 这不是我所期待的,因为我认为很快就是一个“未设置”#34;而不是可打印的对象。
我有什么遗失的东西吗? 谢谢!
答案 0 :(得分:2)
在第二种情况下,你实际上是在创建一个嵌套的可选项,这通常不是一个好主意(它只会导致混乱,我不知道编译器为什么坦率地允许它)。如果你放入行:
let foo = element["two"]
并检查foo
的类型,您会发现它是AnyObject?!
。所以它是一个可选项,没有任何值包含在一个可选项中。这样可以使if/let
语句解包第一个可选项,为您提供第二个可选项,即nil
。