下划线符号是否忽略或检查 Swift 中的 switch 语句是否为空?

Does the underscore symbol ignore or check for nullity in a switch statement in Swift?

我在 Swift 中有这样一个 switch 语句:

switch tuple {
    case (let someObject, let current, nil):
        return true

    // Other cases...
}

元组是(SomeObject?, SomeObject, SomeObject?)类型的,我说的英文是:匹配前两个元素是not[=28=的情况] nil,而第三个(可选) nil.

Xcode 7 告诉我,由于我没有使用绑定 someObjectcurrent,我应该用下划线替换它。但是如果我用下划线替换元组中的第一个元素,它是否也匹配第一个元素为 nil 的情况,因为 _ 意味着编译器忽略该值? 对于第一个元素为零的情况,我有一个单独的案例。

郑重声明,我的代码看起来仍然像我预期的那样工作,但我想确定一下,但我在任何地方都找不到这方面的任何文档。

下划线匹配任何值(nil或非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而最后一个元素不为nil的情况 元素为零。 (SomeObject?, SomeObject, SomeObject?) 的中间元素不是可选的,因此它不能为 nil。

As of Swift 2 / Xcode 7, x? 模式可以用作同义词 对于 .Some(x),在你的情况下

case (_?, _, nil):

匹配第一个元素不为nil且最后一个元素为nil的情况