que programacion orientada objetos inicializadores función estructura entrada datos computadas swift properties contains

programacion - que es self en swift



cómo verificar si existe un valor de propiedad en una matriz de objetos en swift (6)

Estoy tratando de verificar si un elemento específico (valor de una propiedad) existe en una matriz de objetos, pero no pude encontrar ninguna solución. Por favor, hágamelo saber, lo que me estoy perdiendo aquí.

class Name { var id : Int var name : String init(id:Int, name:String){ self.id = id self.name = name } } var objarray = [Name]() objarray.append(Name(id: 1, name: "Nuibb")) objarray.append(Name(id: 2, name: "Smith")) objarray.append(Name(id: 3, name: "Pollock")) objarray.append(Name(id: 4, name: "James")) objarray.append(Name(id: 5, name: "Farni")) objarray.append(Name(id: 6, name: "Kuni")) if contains(objarray["id"], 1) { println("1 exists in the array") }else{ println("1 does not exists in the array") }


En Swift 2.x :

if objarray.contains({ name in name.id == 1 }) { print("1 exists in the array") } else { print("1 does not exists in the array") }


En Swift 3 :

if objarray.contains(where: { name in name.id == 1 }) { print("1 exists in the array") } else { print("1 does not exists in the array") }


Esto funciona bien conmigo:

if(contains(objarray){ x in x.id == 1}) { println("1 exists in the array") }


Fui con esta solución a un problema similar. El uso de contiene devuelve un valor booleano.

var myVar = "James" if myArray.contains(myVar) { print("present") } else { print("no present") }


Puede filtrar la matriz de esta manera:

let results = objarray.filter { $0.id == 1 }

que devolverá una matriz de elementos que coinciden con la condición especificada en el cierre; en el caso anterior, devolverá una matriz que contiene todos los elementos que tienen la propiedad id igual a 1.

Como necesita un resultado booleano, solo haga una comprobación como:

let exists = results.isEmpty == false

exists será cierto si la matriz filtrada tiene al menos un elemento


Una pequeña iteración sobre la solución de @ Antonio utilizando la notación ( where ):

if let results = objarray.filter({ $0.id == 1 }), results.count > 0 { print("1 exists in the array") } else { print("1 does not exists in the array") }