No se puede convertir el valor del tipo 'Opción' al tipo de argumento esperado '@noescape (Opción) throws -> Bool'

Tengo una class llamada Option . Este es un object de dominio, por lo que es una subclass del Object class base del propio reino.

En un controller de vista, tengo una propiedad de matriz que contiene un grupo de objects de Option .

 private var options = [Option]() 

En un método hacia abajo del controller de vista, necesito verificar si un determinado object de Option está contenido dentro de la matriz de opciones antes mencionada.

Anteriormente (Swift 1.2), tengo la lógica de control como esta.

 func itemSelected(selection: Object) { let option = selection as! Option if !contains(options, option) { // act accordingly } } 

Ahora estoy convirtiendo el proyecto a Swift 2 (también he actualizado la versión del Reino a la versión Swift 2). Actualicé el código a esto.

 func itemSelected(selection: Object) { let option = selection as! Option if !options.contains(option) { // act accordingly } } 

¡Pero ahora obtengo el siguiente error de compilation!

No se puede convertir el valor del tipo 'Opción' al tipo de argumento esperado '@noescape (Opción) throws -> Bool'

No puedo entender por qué. ¿Algunas ideas?

Esto se debe a que la function contains ahora espera un cierre en lugar de un elemento en todos los types no equitativos. Todo lo que necesitas hacer es cambiarlo a lo siguiente

 if !(options.contains{$0==option}) { // act accordingly } 

Lo que hace es pasar un cierre a la function, que devuelve verdadero solo si ese cierre satisface alguno de sus elementos. $0 representa el elemento actual en la matriz que la function contains está probando, y devuelve verdadero si ese elemento es igual al que está buscando.

Si bien la primera respuesta indica que este problema se debe a que el método contains debe funcionar en un tipo Equatable , es cierto, eso es solo la mitad de la historia. La class Realm Object henetworkinga NSObject , que se ajusta a Equatable (por lo tanto, esto debería funcionar sin cierre). Para get más información sobre esto, puede consultar este problema en la página Realm GitHub: https://github.com/realm/realm-cocoa/issues/2519 . Los desarrolladores del Reino indican que creen que es un error en Swift.

En última instancia, la solución sugerida es volver a declarar la conformidad a Equatable y Hashable , como tal (esto se copy literalmente del comentario del usuario bdash de GitHub sobre el problema publicado anteriormente):

 public class A: Object, Equatable, Hashable { } public func ==(lhs: A, rhs: A) -> Bool { return lhs.isEqual(rhs) } 

Reemplazaría todas las instancias de tipo A por la Option Tipo en esa muestra.

He probado esta solución, y funciona para mí en XCode 7.2.1, utilizando Swift versión 2.1.1.