To naprawdę jest tylko przełącznik składni. OK, mamy więc wywołanie metody:
[NSPredicate predicateWithFormat:@"name contains[c] %@", searchText]
W Swift konstruktory pomijają część „blahWith…” i po prostu używają nazwy klasy jako funkcji, a następnie przechodzą bezpośrednio do argumentów, tak [NSPredicate predicateWithFormat: …]by się stało NSPredicate(format: …). (Na innym przykładzie [NSArray arrayWithObject: …]będzie to NSArray(object: …). Jest to normalny wzorzec w języku Swift).
Więc teraz musimy tylko przekazać argumenty do konstruktora. W Objective-C literały NSString wyglądają jak @"", ale w Swift używamy po prostu cudzysłowów dla łańcuchów. To daje nam:
let resultPredicate = NSPredicate(format: "name contains[c] %@", searchText)
I faktycznie tego właśnie tutaj potrzebujemy.
(Nawiasem mówiąc, zauważysz, że niektóre inne odpowiedzi zamiast tego używają ciągu formatu, takiego jak "name contains[c] \(searchText)". To nie jest poprawne. To używa interpolacji ciągów, która różni się od formatowania predykatów i generalnie nie działa w tym przypadku).