试图做这样的事情...
func test(a:Int?, b:Int?){
switch (a, b) {
case (nil, nil) : print("Neither")
case let (aa, nil) : print("A-only: \(aa)")
case let (nil, bb ) : print("B-only: \(bb)")
case let (aa, bb ) : print("A and B: \(aa) & \(bb)")
}
}
在以上情况中,aa
和bb
均已解包。
我能想到的最接近的是这个...
func test(a:Int?, b:Int?){
switch (a, b) {
case (nil, nil) : print("Neither")
case ( _, nil) : print("A-only: \(a!)")
case (nil, _) : print("B-only: \(b!)")
default : print("A and B: \(a!) & \(b!)")
}
}
...但是我真的很讨厌我像这样显式地解开了值。
那可以做到吗?
答案 0 :(得分:2)
您需要“可选模式” x?
:
func test(a:Int?, b:Int?) {
switch (a, b) {
case (nil, nil) : print("Neither")
case (let aa?, nil) : print("A-only: \(aa)")
case (nil, let bb?) : print("B-only: \(bb)")
case (let aa?, let bb?) : print("A and B: \(aa) & \(bb)")
}
}
x?
是.some(x)
的快捷方式,因此您可以等效地编写此代码
func test(a:Int?, b:Int?) {
switch (a, b) {
case (nil, nil) : print("Neither")
case (let .some(aa), nil) : print("A-only: \(aa)")
case (nil, let .some(bb)) : print("B-only: \(bb)")
case (let .some(aa), let .some(bb)) : print("A and B: \(aa) & \(bb)")
}
}
正如@vacawama所说,您也可以将let
移动到图案的外部:
case let (aa?, nil) : print("A-only: \(aa)")
case let (nil, bb?) : print("B-only: \(bb)")
case let (aa?, bb?) : print("A and B: \(aa) & \(bb)")