Dies ist wirklich nur ein Syntaxschalter. OK, wir haben also diesen Methodenaufruf:
[NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
In Swift, Bauer überspringt den „blahWith ...“ Teil und verwendet nur die Klassennamen als Funktion und dann auf die Argumente geht gerade, so [NSPredicate predicateWithFormat: …]
würde NSPredicate(format: …)
. (Für ein anderes Beispiel [NSArray arrayWithObject: …]
würde werden NSArray(object: …)
. Dies ist ein reguläres Muster in Swift.)
Jetzt müssen wir nur noch die Argumente an den Konstruktor übergeben. In Objective-C sehen NSString-Literale so aus @""
, aber in Swift verwenden wir nur Anführungszeichen für Zeichenfolgen. Das gibt uns also:
let resultPredicate = NSPredicate(format: "name contains[c] %@", searchText)
Und genau das brauchen wir hier.
(Im Übrigen werden Sie feststellen, dass einige der anderen Antworten stattdessen eine Formatzeichenfolge wie verwenden "name contains[c] \(searchText)"
. Dies ist nicht korrekt. Dies verwendet eine Zeichenfolgeninterpolation, die sich von der Prädikatformatierung unterscheidet und für diese im Allgemeinen nicht funktioniert.)
searchResults = recipes.filter { resultPredicate.evaluateWithObject($0) }
Ich arbeite ziemlich lange mit Prädikaten. Hier ist meine Schlussfolgerung (SWIFT)
quelle
LIKE 'a%z'
?Beispiel für die Verwendung in Swift 2.0
Sie erhalten (Spielplatz)
quelle
Sie können in Swift verfügbare Filter verwenden, um Inhalte aus einem Array zu filtern, anstatt ein Prädikat wie in Objective-C zu verwenden.
Ein Beispiel in Swift 4.0 lautet wie folgt:
Da im obigen Beispiel jedes Element im Array eine Zeichenfolge ist, können Sie die
contains
Methode zum Filtern des Arrays verwenden.Wenn das Array benutzerdefinierte Objekte enthält, können die Eigenschaften dieses Objekts verwendet werden, um die Elemente auf ähnliche Weise zu filtern.
quelle
Verwenden Sie den folgenden Code:
quelle
Ich denke, dies wäre ein besserer Weg, dies in Swift zu tun:
quelle
Sequence
, aber es gibt Fälle, in denen Sie a benötigenNSPredicate
, wie beim Umgang mitNSFetchedResultsController
.In rascher 2.2
In schnellem 3.0
quelle
// ändere "Name" und "Wert" entsprechend deinen Array-Daten.
// Ändern Sie den Namen "yourDataArrayName" für Ihr Array (NSArray).
quelle