我想在所有拥有.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])
是否可以为此方案创建广泛的扩展名?
答案 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)
}
}