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

Mat*_*ros 3 switch-statement swift optional-binding

我在Swift中有一个switch语句,如下所示:

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

    // Other cases...
}
Run Code Online (Sandbox Code Playgroud)

元组的类型的(SomeObject?, SomeObject, SomeObject?),和我说的英语是:匹配其中前两个元素的情况下为零,而第三个(可选的)零.

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

为了记录,看起来我的代码仍然按照我的预期工作,但我想确定,我无法在任何地方找到任何文档.

Mar*_*n R 10

下划线匹配任何值(零或非零),但您的模式也是如此:

case (let someObject, let current, nil):
Run Code Online (Sandbox Code Playgroud)

第一个let someObject匹配任何值(零或非零).所以这实际上并不像你想象的那样有效.

可选类型定义为枚举:

enum Optional<T> : ... {
    case None
    case Some(T)
    // ....
}
Run Code Online (Sandbox Code Playgroud)

nil是一样的Optional.None.因此你可以使用

case (.Some, _, nil):
// Alternatively: 
case (.Some, _, .None):
Run Code Online (Sandbox Code Playgroud)

匹配第一个元素不是nil且最后一个元素为nil的情况.中间元素(SomeObject?, SomeObject, SomeObject?)不是可选的,因此它不能为零.

Swift 2/Xcode 7开始,在您的情况下,x?模式可以用作同义词.Some(x)

case (_?, _, nil):
Run Code Online (Sandbox Code Playgroud)

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