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

时间:2014-06-15 17:21:43

标签: swift

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

e.g。

var objs:String[]?

// Won't work
for obj in objs {

}

2 个答案:

答案 0 :(得分:7)

首先需要打开"打开"可选的,或换句话说,验证它是否为nil

if let actualObjs = objs {
    for obj in actualObjs {
    }
}

actualObjs变为类型:String[]如果objs不是nil,则会使用该列运行该块。如果objsnil,则只会跳过该块。 (有关详细信息,请阅读Apple's Documentation

如果你肯定objs不是nil,你也可以使用强制解包操作符(!):

for obj in objs! {
}

如果objs在这种情况下为nil,则会抛出运行时错误,整个程序将停止。

注意:解开可选项所需的实际原因是,Optional是Swift中自己的类型:

enum Optional<T>

因此,当您尝试直接与Optional进行交互时,您实际上正在与枚举进行交互。这个枚举只是将真实价值存储在其中。 (因此名称&#34;展开&#34;)

答案 1 :(得分:3)

===== Swift 2.1 =====

objs?.forEach {
    print($0) // $0 is obj
}

相同
objs?.forEach { obj in
    // Do something with `obj`
}

===== Swift 1.2 =====

如果您想枚举仍为objs的{​​{1}},

试试吧

[String]?