2

我想为所有具有.containsAPI 的类型创建一个扩展。

例如,我对字符串执行此操作,但想将其扩展为所有类型:

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])

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

4

1 回答 1

6

该版本的contains方法是为任何SequenceType成员定义的Equatable。所以你想要的是扩展Equatable. 像这样:

extension Equatable {
    func within<Seq: SequenceType where Seq.Generator.Element == Self> (values: Seq) -> Bool {
        return values.contains(self)
    }
}
于 2016-03-31T13:04:40.417 回答