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).
searchResults = recipes.filter { resultPredicate.evaluateWithObject($0) }
Trabajando con predicado durante bastante tiempo. Aquí está mi conclusión (SWIFT)
fuente
LIKE 'a%z'
?Ejemplo de uso en swift 2.0
Obtendrás (patio de recreo)
fuente
Puede usar filtros disponibles en Swift para filtrar el contenido de una matriz en lugar de usar un predicado como en Objective-C.
Un ejemplo en Swift 4.0 es el siguiente:
En el ejemplo anterior, dado que cada elemento de la matriz es una cadena, puede usar el
contains
método para filtrar la matriz.Si la matriz contiene objetos personalizados, las propiedades de ese objeto se pueden usar para filtrar los elementos de manera similar.
fuente
Utilice el siguiente código:
fuente
Creo que esta sería una mejor manera de hacerlo en Swift:
fuente
Sequence
, pero hay casos en los que necesitará unNSPredicate
, como cuando se trata deNSFetchedResultsController
.En Swift 2.2
En Swift 3.0
fuente
// cambia "nombre" y "valor" de acuerdo con los datos de tu matriz.
// Cambie el nombre de "yourDataArrayName" según su matriz (NSArray).
fuente