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

时间:2016-03-31 12:51:38

标签: swift swift2 swift-extensions swift2.2

我想在所有拥有.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])

是否可以为此方案创建广泛的扩展名?

1 个答案:

答案 0 :(得分:6)

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

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