arrays - Swift - 访问 nil 不会崩溃

标签 arrays swift cocoa null

我很快就注意到了一个奇怪的行为。 下面的代码将按照人们的预期打印“未找到”。

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

关于arrays - Swift - 访问 nil 不会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37423862/

相关文章:

cocoa - 如何设置 NSOutlineView 以考虑自动布局的最小内容宽度?

c - 排序篮球运动员名字的函数

java - 如何将 2 个键和值的 Java String 数组转换为 json 对象

swift - 无法调用非函数类型的值,swift + cuckoo 模拟框架

ios - 以编程方式更改 xcassets 中颜色集的值

cocoa - NSSplitView:在窗口调整大小期间控制分隔线位置

c - 使用非常量值初始化字符串数组

arrays - 将数据附加到 Swift 中的全局数组

ios - NSClassFromString 用于目标名称中包含空格的 Swift 类

xcode - “NSRectEdge”在此上下文中对于类型查找不明确