Kei*_*out 10 switch-statement swift
我遇到了这个代码,它是Swift算法俱乐部中链接列表的Swift实现的一部分.在整个实现过程中,作者case let在打开一个可选项之前使用了一个while语句.我从来没有看到在switch语句的上下文之外使用case关键字,我想知道它到底是做什么的?它是否以某种方式将该let next? = node.next部分转换为真或假,可能取决于是否next?变为零?
public var last: Node? {
if var node = head {
while case let next? = node.next {
node = next
}
return node
} else {
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
Col*_*aff 14
这是可选模式.它测试并解包Optional,仅在Optional非零时才执行条件.
该关键字case是必需的,因为它遵循原始switch... case语法.该case测试模式,如果匹配,则执行下面的语句.在你的例子中let next?是模式.如果值已解包并已分配,则执行case匹配和代码.
从文档:
可选模式
可选模式匹配包含在Optional或ImplicitlyUnwrappedOptional枚举的Some(Wrapped)情况中的值.可选模式由标识符模式组成,后面紧跟一个问号,并显示在与枚举案例模式相同的位置.
因为可选模式是Optional和ImplicitlyUnwrappedOptional枚举案例模式的语法糖,所以以下是等效的:
Run Code Online (Sandbox Code Playgroud)let someOptional: Int? = 42 // Match using an enumeration case pattern if case .Some(let x) = someOptional { print(x) } // Match using an optional pattern if case let x? = someOptional { print(x) }可选模式提供了一种方便的方法来迭代for-in语句中的可选值数组,仅对非nil元素执行循环体.
Run Code Online (Sandbox Code Playgroud)let arrayOfOptionalInts: [Int?] = [nil, 2, 3, nil, 5] // Match only non-nil values for case let number? in arrayOfOptionalInts { print("Found a \(number)") } // Found a 2 // Found a 3 // Found a 5
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |