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