Swift - 访问 nil 不会崩溃



我注意到 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)的效果。

相关内容

  • 没有找到相关文章

最新更新