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