C'est vraiment juste un commutateur de syntaxe. OK, nous avons donc cet appel de méthode:
[NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
Dans Swift, les constructeurs ignorent la partie "blahWith…" et utilisent simplement le nom de la classe comme fonction, puis vont directement aux arguments, ce [NSPredicate predicateWithFormat: …]
qui deviendrait NSPredicate(format: …)
. (Pour un autre exemple, [NSArray arrayWithObject: …]
deviendraitNSArray(object: …)
. Il s'agit d'un modèle régulier dans Swift.)
Alors maintenant, nous avons juste besoin de passer les arguments au constructeur. En Objective-C, les littéraux NSString ressemblent à @""
, mais dans Swift, nous utilisons simplement des guillemets pour les chaînes. Cela nous donne donc:
let resultPredicate = NSPredicate(format: "name contains[c] %@", searchText)
Et en fait, c'est exactement ce dont nous avons besoin ici.
(Incidemment, vous remarquerez que certaines des autres réponses utilisent à la place une chaîne de format comme "name contains[c] \(searchText)"
. Ce n'est pas correct. Cela utilise une interpolation de chaîne, qui est différente du formatage des prédicats et ne fonctionnera généralement pas pour cela.)
searchResults = recipes.filter { resultPredicate.evaluateWithObject($0) }
Travailler avec un prédicat depuis assez longtemps. Voici ma conclusion (SWIFT)
la source
LIKE 'a%z'
?Exemple d'utilisation dans Swift 2.0
Vous obtiendrez (terrain de jeu)
la source
Vous pouvez utiliser les filtres disponibles dans swift pour filtrer le contenu d'un tableau au lieu d'utiliser un prédicat comme dans Objective-C.
Un exemple dans Swift 4.0 est le suivant:
Dans l'exemple ci-dessus, puisque chaque élément du tableau est une chaîne, vous pouvez utiliser le
contains
méthode pour filtrer le tableau.Si le tableau contient des objets personnalisés, les propriétés de cet objet peuvent être utilisées pour filtrer les éléments de la même manière.
la source
Utilisez le code ci-dessous:
la source
Je pense que ce serait une meilleure façon de le faire dans Swift:
la source
Sequence
, mais il y a des cas où vous aurez besoin d'unNSPredicate
, comme pour traiterNSFetchedResultsController
.Dans Swift 2.2
Dans Swift 3.0
la source
// changez "nom" et "valeur" en fonction des données de votre tableau.
// Changez le nom "yourDataArrayName" en fonction de votre tableau (NSArray).
la source