我很快就注意到了一个奇怪的行为。 下面的代码将按照人们的预期打印“未找到”。
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/