En realidad, esto es solo un cambio de sintaxis. OK, entonces tenemos esta llamada al método:
[NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
En Swift, los constructores omiten la parte "blahWith ..." y simplemente usan el nombre de la clase como una función y luego van directamente a los argumentos, así [NSPredicate predicateWithFormat: …]se convertiría NSPredicate(format: …). (Otro ejemplo, [NSArray arrayWithObject: …]se convertiría en NSArray(object: …). Este es un patrón regular en Swift).
Entonces ahora solo necesitamos pasar los argumentos al constructor. En Objective-C, los literales NSString se ven así @"", pero en Swift solo usamos comillas para las cadenas. Entonces eso nos da:
let resultPredicate = NSPredicate(format: "name contains[c] %@", searchText)
Y de hecho eso es exactamente lo que necesitamos aquí.
(Por cierto, notará que algunas de las otras respuestas usan una cadena de formato como "name contains[c] \(searchText)". Eso no es correcto. Eso usa interpolación de cadenas, que es diferente del formato de predicado y generalmente no funcionará para esto).