Swift - 访问nil不会崩溃

时间:2016-05-24 21:03:48

标签: arrays swift cocoa null

我注意到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;而不是可打印的对象。

我有什么遗失的东西吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

在第二种情况下,你实际上是在创建一个嵌套的可选项,这通常不是一个好主意(它只会导致混乱,我不知道编译器为什么坦率地允许它)。如果你放入行:

let foo = element["two"]

并检查foo的类型,您会发现它是AnyObject?!。所以它是一个可选项,没有任何值包含在一个可选项中。这样可以使if/let语句解包第一个可选项,为您提供第二个可选项,即nil