You can define a custom pattern corresponding to the ~= operator, which takes an array as a "pattern" and a 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 }
Similar operators already exist, for example, for intervals:
public func ~=<I : IntervalType>(pattern: I, value: I.Bound) -> Bool
source share