【问题标题】:Optionals in For Case statementFor Case 语句中的可选项
【发布时间】:2017-10-06 15:03:25
【问题描述】:

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

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”本身似乎是一个可选变量,这意味着需要在打印语句中再次解包该值,但这会产生错误:“无法强制解包非可选类型'Int'的值”这意味着“val”不是可选变量。

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

谢谢, 乌杰瓦尔

【问题讨论】:

    标签: swift optional


    【解决方案1】:

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

    来自Optional Patterns:

    可选模式匹配包裹在 some(Wrapped) 情况下的 Optional<Wrapped> 枚举值。可选模式由一个标识符模式组成,后跟一个问号,并出现在与枚举案例模式相同的位置。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-25
        • 2023-04-07
        • 1970-01-01
        相关资源
        最近更新 更多