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开关模式与数组匹配的主要内容,如果未能解决你的问题,请参考以下文章

解释模式匹配与开关

Swift中开关盒的详尽条件

NSArray元素的原因无法与Swift数组元素类型匹配

开关打开时更改 UITableViewCells 的背景颜色 - Swift

这种开关/模式匹配的想法有啥好处吗?

如何使用与 NewtonSoft (JSON.Net) 组件中的 JSON 匹配的 Swift 类从/向 JSON 读取/写入对象数组?