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

Actualmente, tengo una variedad 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 hacerlo, 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 syntax abreviada que me falta o una mejor manera de hacer esto?

¿Por qué no utilizar la función incorporada de contains() ? Viene en dos sabores

 func contains(seq: S, predicate: @noescape (S.Generator.Element) -> L) -> Bool func contains(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() han sido reemplazadas 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 el predicado) 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 para la matriz que se vería algo así 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 syntax. Sin embargo, si está usando la frecuencia, puede escribirla de la siguiente manera

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

Cambiaría el nombre para evitar confusiones en tu código.