For Case语句中的可选项

时间:2017-10-06 06:54:46

标签: swift optional

我有一个需要转换为整数数组的字符串数组。

import Foundation

let strings = ["One", "2", "Three", "4", "Five", "6"]

let integers = strings.map{Int($0)}

// :Using Optional Binding in a FOR Case Statement
for case let val? in integers {
    print("\(val)")
}

在上面的For Case语句中,我们正在使用[Int?]数组中的Optional值进行模式匹配。我对这个概念的理解是,由于数组是一个可选的int数组,返回的值必须在使用它们之前解包,但是我们在For Case语句中使用Optional Binding,因此值被解包到变量&#中34; VAL&#34 ;.但变量" val"本身似乎是一个可选变量,这意味着该值需要在print语句中再次解包,但这会产生错误:"不能强制解包非可选类型的值' Int'& #34;这意味着" val"不是可选变量。

这真令人困惑。有人可以解释为什么变量" val"当我们使用"?"时不是可选变量用它!!

谢谢, Ujjwal

2 个答案:

答案 0 :(得分:2)

val?是“可选模式”,是.some(val)的快捷方式。 如果表达式不是nil,它匹配可选表达式, 然后将val绑定到匹配表达式的 unwrapped 值。

来自Optional Patterns

  

可选模式匹配some(Wrapped)枚举的Optional<Wrapped>个案中包含的值。可选模式由标识符模式组成,后面紧跟一个问号,并显示在与枚举案例模式相同的位置。

因此,val是非可选的Int,正如您所观察到的那样。

答案 1 :(得分:0)

当您使用for case时,您会有条件地对某个集合进行迭代。它只会迭代和处理与模式匹配的元素。如果你在另一个单词val?中描述它是optional