For Case 语句中的可选项



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

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?] 数组中的可选值进行模式匹配。我对这个概念的理解是,由于数组是一个可选的 int 数组,返回的值必须在使用它们之前解开包装,但是我们在 For Case 语句中使用可选绑定,因此值被解包到变量"val"中。但是变量 "val" 本身似乎是一个可选变量,这意味着该值需要在 print 语句中再次解包,但这给出了一个错误:"无法强制解开非可选类型'Int'的值",这意味着"val"不是可选变量。

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

谢谢 乌吉瓦尔

val?是"可选模式"和.some(val)的快捷方式。 如果可选表达式未nil,则它匹配该表达式, 然后将val绑定到匹配表达式的解包值。

从可选模式:

可选模式匹配包装在Optional<Wrapped>枚举的some(Wrapped)大小写中的值。可选模式由标识符模式后跟问号组成,并出现在与枚举大小写模式相同的位置。

因此,正如您所观察到的,val是一个非可选的Int

当你使用for case时,你会有条件地迭代一个集合。它只会迭代和处理与模式匹配的元素。如果您描述它val?换句话说optional.

最新更新