下划线符号是否忽略或检查 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 告诉我,由于我没有使用绑定 someObject
和 current
,我应该用下划线替换它。但是如果我用下划线替换元组中的第一个元素,它是否也匹配第一个元素为 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的情况
我在 Swift 中有这样一个 switch 语句:
switch tuple {
case (let someObject, let current, nil):
return true
// Other cases...
}
元组是(SomeObject?, SomeObject, SomeObject?)
类型的,我说的英文是:匹配前两个元素是not[=28=的情况] nil,而第三个(可选)是 nil.
Xcode 7 告诉我,由于我没有使用绑定 someObject
和 current
,我应该用下划线替换它。但是如果我用下划线替换元组中的第一个元素,它是否也匹配第一个元素为 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的情况