为什么Swift中的可选数组不可枚举?

Boo*_*oon 2 swift

为什么Swift中的可选数组不可枚举?什么是让它发挥作用的最佳方法?

例如

var objs:String[]?

// Won't work
for obj in objs {

}
Run Code Online (Sandbox Code Playgroud)

dre*_*wag 7

您首先需要"解包"可选项,或者换句话说,验证它是否是nil:

if let actualObjs = objs {
    for obj in actualObjs {
    }
}
Run Code Online (Sandbox Code Playgroud)

actualObjs变为type:String[]如果objs不是,则使用它运行块nil.如果 objsnil,则只会跳过该块.(有关此内容的更多信息,请阅读Apple的文档)

如果你是积极的,objs是不是nil,你也可以只使用武力展开操作符(!):

for obj in objs! {
}
Run Code Online (Sandbox Code Playgroud)

如果objsnil这种情况,它将抛出运行时错误,整个程序将停止.

注意:你需要打开可选项的实际原因是,它Optional是Swift中自己的类型:

enum Optional<T>
Run Code Online (Sandbox Code Playgroud)

因此,当您尝试Optional直接与其进行交互时,您实际上正在与枚举进行交互.这个枚举只是将真实价值存储在其中.(因此得名"unwrap")