Swift-filter-array von strings
Hab ich Schwierigkeiten hatte Filterung Reihe von keywords (strings) in swift ,Mein code:
self.filteredKeywords=filter(keywords.allValues, {(keyword:NSString) ->
Bool in
let words=keyword as? NSString
return words?.containsString(searchText)
})
Als AnyObject
können nicht Untertyp von NSString
, ich bin stecken mit diesem!
- Was ist die genaue Fehlermeldung, die Sie bekommen? Was gedruckt wird, wenn Sie versuchen
NSLog("\(keywords)")
? - Nur beachten Sie, dass Sie wieder optional. Hoffe, das hilft
- es läuft nicht es gibt mir die oben genannten Fehler : "AnyObject ist kein Subtyp von NSString"
- Haben die unten Antworten, die Ihre Frage beantworten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Swift 4.2 bietet eine neue Möglichkeit, dies zu tun:
[Updated for Swift 2.0]
Als
NSString
ist gebührenfrei überbrückt, SwiftString
, nur vermeiden, den Zwang mit:Aber, wenn Sie denken
allValues
sind nicht Saiten:gibt ein optionales array.
Ihre
filter
ist über[AnyObject]
, aber Ihre Schließung dauertNSString
. Diese müssen übereinstimmen. Auch Ihr Ergebnis mussBool
, nicht einBool?
. Sie können diese Adresse einfach so:Dieser akzeptiert
AnyObject
und dann versucht zu zwingen, es unten zuNSString
. Es dann null-coalleces (??
) das Ergebnis, um sicherzustellen, es ist immer einBool
.Ich Ihnen empfehlen würde, die Behandlung von
keywords
als[String:String]
eher als eineNSDictionary
. Das wäre befreien Sie sich von all den Komplikationen vonAnyObject
. Dann können Sie genau dies tun:Wann immer möglich, wandeln Stiftung Sammlungen in Swift-Sammlungen, sobald Sie können, und speichern diese. Wenn Sie eingehende Foundation-Objekte können Sie in der Regel konvertieren Sie Sie einfach mit Techniken wie:
Oder Sie können Folgendes tun, Sie zu bekehren, so dass Sie ' ll Absturz in debug (aber im hintergrund "arbeiten" in der Version):
Gibt es sowohl ein problem mit GoZoner Antwort für bestimmte Datentypen und auch einen etwas besseren Weg, dies zu tun. Die folgenden Beispiele können dies zeigen:
Wahrscheinlich nicht der Satz, den Sie erwartet!
Aber dies funktioniert gut auf diese Weise, wenn wir nicht geben animalArray als NSMutableArray:
Aber ich würde empfehlen, mit $0.enthält() anstelle von $0.rangeOfString() != null, weil es funktioniert in beiden Fällen und leicht erhöht die Lesbarkeit des Codes: