Swift开关模式与数组匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
}
我知道还有其他方法可以使这个人为的例子工作,如case 4, 5, 6:
或不使用开关,而是使用bar.contains(value)
,但我正在寻找一个特别涉及开关模式匹配到阵列的解决方案。谢谢!
答案
您可以定义一个自定义模式匹配运算符~=
,它将数组作为“模式”和值:
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
}
已经存在类似的运算符间隔时间:
public func ~=<I : IntervalType>(pattern: I, value: I.Bound) -> Bool
另一答案
怎么样:
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")
}
以上是关于Swift开关模式与数组匹配的主要内容,如果未能解决你的问题,请参考以下文章
开关打开时更改 UITableViewCells 的背景颜色 - Swift
如何使用与 NewtonSoft (JSON.Net) 组件中的 JSON 匹配的 Swift 类从/向 JSON 读取/写入对象数组?