Extensões de matriz Swift "where"
A partir do Swift 2.0, parece que podemos nos aproximar de extensões de tipos genéricos aplicáveis a situações predicadas.
Embora ainda não possamos fazer isso:
protocol Idable {
var id : String { get }
}
extension Array where T : Idable {
...
}
... agora podemos fazer isso:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
...
}
}
... e Swift aceita gramaticalmente. No entanto, para a minha vida, não consigo descobrir como fazer o compilador feliz quando preenche o conteúdo da função de exemplo. Suponha que eu seja o mais explícito possível:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
return self.filter { (item : T) -> Bool in
return item.id == id
}
}
}
... o compilador não aceitará o fechamento fornecido para filtrar, reclamando
Não é possível invocar 'filter' com uma lista de argumentos do tipo '((T) -> Bool)'
Semelhante se o item for especificado como Idable. Alguém teve alguma sorte aqui?