Fra*_*kie 10 arrays switch-statement ios swift
好奇如果有办法在Swift中执行以下操作.
let foo = [1, 2, 3]
let bar = [4, 5, 6]
let value = 5
switch value {
case in foo
print("5 is in foo")
case in bar
print("5 is in bar")
default:
break
}
Run Code Online (Sandbox Code Playgroud)
我理解还有其他方法可以使这个人为的例子工作,比如case 4, 5, 6:使用或不使用开关而是使用,bar.contains(value)但我正在寻找一个专门涉及到数组的开关模式匹配的解决方案.谢谢!
Abi*_*ern 26
怎么样:
let foo = [1, 2, 3]
let bar = [4, 5, 6]
let value = 5
switch value {
case _ where foo.contains(value):
print("\(value) is in foo")
case _ where bar.contains(value):
print("\(value) is in bar")
default:
print("\(value) is not in foo or bar")
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 19
您可以定义一个自定义模式匹配运算符
~=,它将数组作为"模式"和值:
func ~=<T : Equatable>(array: [T], value: T) -> Bool {
return array.contains(value)
}
let foo = [1, 2, 3]
let bar = [4, 5, 6]
let value = 5
switch value {
case foo:
print("\(value) is in foo")
case bar:
print("\(value) is in bar")
default:
break
}
Run Code Online (Sandbox Code Playgroud)
类似的运算符已存在,例如间隔:
public func ~=<I : IntervalType>(pattern: I, value: I.Bound) -> Bool
Run Code Online (Sandbox Code Playgroud)