Swift "where" Array-Erweiterungen
b Swift 2.0 scheinen wir Erweiterungen generischer Typen näher zu kommen, die auf prädizierte Situationen anwendbar sin
Obwohl wir das immer noch nicht können:
protocol Idable {
var id : String { get }
}
extension Array where T : Idable {
...
}
... das können wir jetzt machen:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
...
}
}
... und Swift akzeptiert es grammatikalisch. Für mein Leben kann ich jedoch nicht herausfinden, wie ich den Compiler glücklich machen kann, wenn ich den Inhalt der Beispielfunktion ausfülle. Angenommen, ich würde so deutlich wie möglich sein:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
return self.filter { (item : T) -> Bool in
return item.id == id
}
}
}
... der Compiler akzeptiert die zum Filtern bereitgestellte Schließung nicht und beschwert sich
Kann nicht 'filter' mit einer Argumentliste vom Typ '((T) -> Bool)' aufrufen
Ähnlich, wenn item als Idable angegeben ist. Hat hier jemand Glück gehabt?