what programming method language functions according methods swift closures protocols xcode6-beta7

methods - programming - swift method



La aplicación parcial del método de protocolo no está permitida (2)

Por lo tanto, no puedo hablar de por qué se comporta así, pero encontré una solución alternativa. Prueba esto:

aString = { return a.someFunc() }

¿Alguien puede explicar este error y por qué esto funciona con el cierre?

Si cambia ''Prueba'' a ''A'' dentro de la clase ''B'', todo funciona en ambos casos.

beta 7

protocol Test { func someFunc() -> String var someClosure: () -> Int { get } } class A: Test { func someFunc() -> String { return "A String" } var someClosure: () -> Int { return { return 2 } } } class B { let a: Test let aString: () -> String let aInt: () -> Int init(a: Test){ self.a = a aString = a.someFunc // Error: Partial application of protocol method is not allowed aInt = a.someClosure // Works fine } }

ACTUALIZAR

También aquí está mi extraña colección de fallas de segmentación https://gist.github.com/aleksgapp/795a2d428008bdfa4823

No dude en comentar si tiene alguna idea sobre alguna.


ACTUALIZACIÓN (gracias a Laszlo Korte)

Desde Xcode 7 Beta 2 con Swift 2.0 Notas de la versión: Los métodos no mutantes de estructuras, enumeraciones y protocolos ahora se pueden aplicar parcialmente a su parámetro "propio".

Por ejemplo:

let a: Set<Int> = [1, 2] let b: [Set<Int>] = [[1], [3]] b.map(a.union) // [[1, 2], [1, 2, 3]]

RESPUESTA ORIGINAL (correcta para Xcode 6 con Swift 1.2)

El protocolo puede ser adoptado por clase, estructura o enumeración . En los dos últimos casos no se permite la aplicación parcial de la estructura o el método de enumeración y se obtiene "La aplicación parcial del método de protocolo no está permitida" porque a: Test puede ser de estructura o enumeración.

El método o función parcialmente aplicado es, en otras palabras, curried method or function . Entonces, cuando escribes a.someFunc intentas aplicar este método parcialmente, es decir, obtener referencia al cierre que implícitamente contiene referencia a a . Pero las estructuras y las enumeraciones no son tipos de referencia, son tipos de valores y no hay referencia a a .