如何为所有具有“.contains”的类型创建扩展名?

How to create extension for all types that have ".contains"?

我想为具有 .contains API.

的所有类型创建一个扩展

例如,我为字符串做了这个,但想为所有类型扩展它:

func within(values: [String]) -> Bool {
    return values.contains(self)
}

用这个,而不是这个:

["abc", "def", "ghi"].contains("def")

为了方便起见,我可以这样做:

"def".within(["abc", "def", "ghi"])

但是我想使用这样的东西,例如:

[.North, .South].contains(.West)

所以我可以用枚举来做到这一点:

let value = .West
value.within([.North, .South])

是否可以为这种情况创建广泛的扩展?

That version of the contains method 是为成员为 Equatable 的任何 SequenceType 定义的。所以你想要的是扩展Equatable。像这样:

extension Equatable {
    func within<Seq: SequenceType where Seq.Generator.Element == Self> (values: Seq) -> Bool {
        return values.contains(self)
    }
}