Patrón de conmutación rápido que coincide con matrices

Curioso si hay alguna manera de hacer lo siguiente en 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 } 

Entiendo que hay otras forms en las que podría hacer que este ejemplo artificial funcione como el case 4, 5, 6: o que no use un bar.contains(value) y que en su lugar use bar.contains(value) pero estoy buscando una solución que involucre específicamente el patrón de conmutación una matriz. ¡Gracias!

Puede definir un operador de coincidencia de patrón personalizado ~= que toma una matriz como el "patrón" y un valor:

 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 } 

Ya existen operadores similares, por ejemplo, para intervalos:

 public func ~=<I : IntervalType>(pattern: I, value: I.Bound) -> Bool 

Qué tal si:

 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") }