为什么Swift中的可选数组不可枚举?什么是让它发挥作用的最佳方式?
e.g。
var objs:String[]?
// Won't work
for obj in objs {
}
答案 0 :(得分:7)
首先需要打开"打开"可选的,或换句话说,验证它是否为nil
:
if let actualObjs = objs {
for obj in actualObjs {
}
}
actualObjs
变为类型:String[]
如果objs
不是nil
,则会使用该列运行该块。如果objs
为nil
,则只会跳过该块。 (有关详细信息,请阅读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]?