Gra*_*lex 4 ios class-extensions swift
我正在尝试在Array中添加扩展方法,如下所示:
extension Array {
func contains(obj: T) -> Bool {
let filtered = self.filter {$0 == obj}
return filtered.count > 0
}
}
Run Code Online (Sandbox Code Playgroud)
但是self.filter {$0 == obj}不要工作.编译错误:
无法找到接受提供的参数的'=='的重载
ate*_*nji 32
你实际上不需要编写扩展,你可以使用containsSwift库中的全局函数:
contains([1,2,3], 1)
Run Code Online (Sandbox Code Playgroud)
nsc*_*hum 13
正如我在评论中提到的,有一个contains功能.但要回答如何编写扩展以及编译器错误意味着什么的问题:
数组中的元素不一定能与之比较==.您需要确保参数是,Equatable并且您需要确保数组元素的类型相同.
extension Array {
func contains<T : Equatable>(obj: T) -> Bool {
let filtered = self.filter {$0 as? T == obj}
return filtered.count > 0
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 2包含SequenceType.contains,这正是您尝试创建的.
这是通过Swift语法实现的,该语法允许将方法限制为某些(例如Equatable)类型参数.它看起来像这样:
extension SequenceType where Generator.Element: Equatable {
func contains(element: Self.Generator.Element) -> Bool {
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13081 次 |
| 最近记录: |