下划线符号是不是会忽略或检查 Swift 中 switch 语句中的无效性?
Posted
技术标签:
【中文标题】下划线符号是不是会忽略或检查 Swift 中 switch 语句中的无效性?【英文标题】:Does the underscore symbol ignore or check for nullity in a switch statement in Swift?下划线符号是否会忽略或检查 Swift 中 switch 语句中的无效性? 【发布时间】:2015-06-24 12:04:51 【问题描述】:我在 Swift 中有这样的 switch 语句:
switch tuple
case (let someObject, let current, nil):
return true
// Other cases...
元组的类型是(SomeObject?, SomeObject, SomeObject?)
,我用英文说的是:匹配前两个元素not nil,而第三个(可选) 是无。
Xcode 7 告诉我,由于我没有使用绑定 someObject
和 current
,我应该用下划线替换它。但是如果我用下划线替换了元组中的第一个元素,它是否也与第一个元素为 nil 的情况相匹配,因为_
意味着编译器会忽略该值? 对于第一个元素为 nil 的情况,我有一个单独的案例。
作为记录,看起来我的代码仍然可以按预期工作,但我想确定一下,我在任何地方都找不到任何文档。
【问题讨论】:
【参考方案1】:下划线匹配任何值(nil 或 non-nil),但这也是 您的模式的情况:
case (let someObject, let current, nil):
第一个 let someObject
匹配任何值(nil 或非 nil)。所以这实际上并没有按您的预期工作。
可选类型定义为枚举:
enum Optional<T> : ...
case None
case Some(T)
// ....
并且nil
与Optional.None
相同。
因此你可以使用
case (.Some, _, nil):
// Alternatively:
case (.Some, _, .None):
匹配第一个元素不是nil和最后一个元素的情况
元素为零。 (SomeObject?, SomeObject, SomeObject?)
的中间元素不是可选的,所以不能为 nil。
从 Swift 2 / Xcode 7 起,x?
模式可以用作同义词
对于.Some(x)
,在你的情况下
case (_?, _, nil):
匹配第一个元素不是 nil 而最后一个元素是 nil 的情况。
【讨论】:
以上是关于下划线符号是不是会忽略或检查 Swift 中 switch 语句中的无效性?的主要内容,如果未能解决你的问题,请参考以下文章