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告诉我,因为我没有使用绑定someObject
和current
,我应该用下划线代替它.但是如果我用下划线替换元组中的第一个元素,它是否也会匹配第一个元素为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的情况.
归档时间: |
|
查看次数: |
450 次 |
最近记录: |