Swift search Array / NSArray para múltiples valores

Dos preguntas facetas:

var array = [1,2,3,4,5] contains(array, 0) // false var array2: NSArray = [1,2,3,4,5] array2.containsObject(4) // true 

¿Hay alguna forma de search un Array por más de 1 valor? es decir. ¿Puedo escribir a continuación para search en la matriz valores múltiples y devolver true si se encuentra alguno de los valores? La segunda parte de la pregunta es ¿cómo puedo hacer eso por un NSArray también?

 var array = [1,2,3,4,5] contains(array, (0,2,3)) // this doesn't work of course but you get the point 

Una opción sería utilizar un Set para los términos de búsqueda:

 var array = [1,2,3,4,5] let searchTerms: Set = [0,2,3] !searchTerms.isDisjointWith(array) 

( isDisjointWith negar el valor de isDisjointWith , ya que devuelve false cuando se encuentra al less uno de los términos).

Tenga en count que también podría extender Array para agregar una abreviatura para esto:

 extension Array where Element: Hashable { func containsAny(searchTerms: Set<Element>) -> Bool { return !searchTerms.isDisjointWith(self) } } array.containsAny([0,2,3]) 

En cuanto a NSArray , puede usar la versión de contains que toma un bloque para determinar la coincidencia:

 var array2: NSArray = [1,2,3,4,5] array2.contains { searchTerms.contains(($0 as! NSNumber).integerValue) } 

Explicación de la syntax de cierre (como se solicita en los comentarios): puede poner el cierre fuera de () de la llamada de método si es el último parámetro, y si es el único parámetro, puede omitir () completo. $0 es el nombre pnetworkingeterminado del primer argumento para el cierre ( $1 sería el segundo, etc.). Y el return puede omitirse si el cierre es solo una expresión. El equivalente largo:

 array2.contains({ (num) in return searchTerms.contains((num as! NSNumber).integerValue) }) 

Puede encadenar contiene junto con una segunda matriz:

 // Swift 1.x contains(array) { contains([0, 2, 3], $0) } // Swift 2 (as method) array.contains{ [0, 2, 3].contains($0) } // and since Xcode 7 beta 2 you can pass the contains function which is associated to the array ([0, 2, 3]) array.contains([0, 2, 3].contains)