如何为所有具有“.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)
}
}
我想为具有 .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)
}
}