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.)