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
.