ich eine Caching-Array haben, die verschiedene Arten von Objekten wie UIViews speichern kann, UICollectionReuableView, etcSwift Generics: Benutzerdefinierte Verschluss mit mehreren Argumenten für Filterfunktion
var arrCache = [AnyObject]()
Ich möchte diese spezifischen Elemente herauszufiltern eingebaut Verwendung Filterfunktion durch einen benutzerdefinierten Verschluss wie folgt übergeben:
private func reusableViewsClosure<T where T: Equatable>(element : AnyObject, type: T) -> Bool {
return element is T ? true : false
}
Nun, wenn ich diesen Verschluss auf der Filterfunktion aufrufen, erhalte ich eine Fehlermeldung,
let i = arrCache.filter(reusableViewsClosure(UIView))
// Fehler: Aufruf Ergebnistyp bool zu erwarteten Typ ‚(@noescape (ANYOBJECT) wirft -> Bool)‘ konvertieren kann nicht
Nur frage mich, ob es erlaubt ist, passieren zusätzliche Parameter für Verschlüsse für verwendet gebaut in Funktionen wie Karte, flatmap, Filter, etc, denn wenn ich die gleiche Funktion wie das unten nennen, funktioniert es ganz gut:
private func reusableHeaderViewsClosure(element : AnyObject) -> Bool {
return element is UICollectionReusableView ? true : false
}
...
let i = arrCache.filter(reusableHeaderViewsClosure)
Was ist 'reusableViewsClosure (UIView)' versuchen zu erreichen? – jtbandes
'reusableViewsClosure (UIView)' ist eigentlich eine generische Closure zum Ausfiltern von Elementen basierend auf dem angegebenen Typ, in diesem Fall UIView. Ich wollte auch UICollectionReusableView auf die gleiche Funktion übergeben, um Code-Duplizierung zu vermeiden –
Aber wenn Sie 'wiederverwendbareViewsClosure (UIView)' schreiben, versucht es, die Funktion aufzurufen. – jtbandes