从Swift 2.0开始,我们似乎可以更接近于适用于预测情况的泛型类型的扩展.
尽管我们仍然无法做到这一点:
protocol Idable {
var id : String { get }
}
extension Array where T : Idable {
...
}
...我们现在可以这样做:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
...
}
}
...Swift 在语法上接受了它.然而,就我个人而言,当我填写示例函数的内容时,我不知道如何让编译器满意.假设我尽可能明确地说:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
return self.filter { (item : T) -> Bool in
return item.id == id
}
}
}
...编译器不会接受提供给筛选器的闭包,因此会抱怨
Cannot invoke 'filter' with an argument list of type '((T) -> Bool)'
如果项目被指定为可识别,则类似.有人在这里走运吗?