valor saber objetos multidimensional existe eliminar elemento diccionarios dentro con comprobar buscar array arrays swift

arrays - objetos - saber si un elemento existe en un array angularjs



¿Taquigrafía para probar si un objeto existe en una matriz para Swift? (2)

Actualmente, tengo una serie de objetos como este:

var myArr = [ MyObject(name: "Abc", description: "Lorem ipsum 1."), MyObject(name: "Def", description: "Lorem ipsum 2."), MyObject(name: "Xyz", description: "Lorem ipsum 3.") ]

Estoy probando si existe un objeto antes de proceder de esta manera:

let item = myArr.filter { $0.name == "Def" }.first if item != nil { // Do something... }

Pero estoy buscando una forma más corta de hacer esto ya que estoy haciendo esto mucho. Me gustaría hacer algo como esto pero no es válido:

if myArr.contains { $0.name == "Def" } { // Do something... }

¿Hay alguna sintaxis taquigráfica que falte o una mejor manera de hacerlo?


¿Por qué no usar la función contains() ? Se presenta en dos sabores.

func contains<S : SequenceType, L : BooleanType>(seq: S, predicate: @noescape (S.Generator.Element) -> L) -> Bool func contains<S : SequenceType where S.Generator.Element : Equatable>(seq: S, x: S.Generator.Element) -> Bool

y el primero toma un predicado como argumento.

if contains(myArr, { $0.name == "Def" }) { println("yes") }

Actualización: a partir de Swift 2, ambas funciones globales de contains() se han reemplazado por métodos de extensión de protocolo :

extension SequenceType where Generator.Element : Equatable { func contains(element: Self.Generator.Element) -> Bool } extension SequenceType { func contains(@noescape predicate: (Self.Generator.Element) -> Bool) -> Bool }

y el primero (basado en predicados) se usa como:

if myArr.contains( { $0.name == "Def" }) { print("yes") }

Swift 3:

if myArr.contains(where: { $0.name == "Def" }) { print("yes") }


En mi humilde opinión para lograr el comportamiento deseado, tendría que crear una clase de extensión a la matriz que se vería como:

extension Array { func contains(test: (T) -> Bool, action: (T) -> Void) { let filtered = self.filter(test) if(filtered.is​Empty) { action(filtered) } } }

No tengo xcode delante de mí, así que me disculpo si tengo un error de sintaxis. Sin embargo, si está utilizando la frecuencia, puede escribirla de la siguiente manera

myArr.contains({ $0.name == "Def"}) { // Do something... }

Lo renombraría para evitar confusiones en su código.