protocols - que - significado de mutabilidad alimentaria
Swift 2 Error al utilizar la función de mutación en la extensión del protocolo "No se puede usar el miembro de mutación en un valor inmutable: ''self'' es inmutable (1)
El problema es que, en el protocolo, marca la función como mutante, lo que debe hacer si desea usar el protocolo en una estructura. Sin embargo, el self que se pasa a testFunc
es inmutable (es una referencia a una instancia de la clase) y eso está activando el compilador. Esto tendría sentido si testClass fuera realmente una estructura y usted podría hacer que la función mute para resolver el problema.
Puedo ver dos alrededores:
hacer la clase de protocolo solamente
protocol MTKAnimateValueDelegate: class { ...
Haga de testClass una estructura y marque testFunc como mutante.
De cualquier manera, creo que este es un error que debe ser reportado a Apple.
No estoy seguro de lo que está pasando aquí, parece que debería ser bastante sencillo. Tengo un protocolo que var mutable, una extensión con una función de mutación. Las cosas se están agotando en el testClass.testFunc , cuando intento usar mtkAnimQueAppend declarado en la extensión, aparece este error: "No puedo usar el miembro mutante en valor inmutable: ''self'' es inmutable.
protocol MTKAnimateValueDelegate {
var mtkAnimQue:[MTKAnimateValue]? {get set}
}
extension MTKAnimateValueDelegate {
///Adds element to que
mutating func mtkAnimQueAppend(element:MTKAnimateValue) {
if mtkAnimQue != nil {
mtkAnimQue?.append(element)
} else {
mtkAnimQue = [element]
}
}
}
class testClass: MTKAnimateValueDelegate {
var mtkAnimQue:[MTKAnimateValue]?
func testFunc() {
var animValue = MTKAnimateValue(fromValue: 10, toValue: 20, inSeconds: 2)
animValue.isAnimating = true
mtkAnimQueAppend(animValue) //ERROR: "Cannot use mutating member on immutable value: ''self'' is immutable
}
}