Swift包含Array的扩展

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

Swift 1.x

正如我在评论中提到的,有一个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/Xcode 7(Beta)

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)