Vous ne savez pas ce qui se passe ici, il semble que ce devrait être assez simple. , une extension avec une fonction de mutation.Les choses se désintéressent dans le testClass.testFunc, quand j'essaie d'utiliser mtkAnimQueAppend déclaré dans l'extension, j'obtiens cette erreur: "Impossible d'utiliser un membre mutant sur la valeur immuable: 'self est immuable.Swift 2 Erreur d'utilisation de la fonction de mutation dans l'extension Protocol "Impossible d'utiliser un membre mutant sur une valeur immuable: 'self' est immuable
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
}
}
Je trouve tout ce problème incroyable à plusieurs niveaux. La toute première chose que vous voulez faire avec Swift, c'est bien sûr de faire un mixin qui fonctionne comme ça, pour les contrôleurs de vue. Je veux dire que c'est un langage orienté protocole. Et ios "est des contrôleurs de vue". Alors, quelle est la première chose que vous faites? Pour moi, il est impossible de croire que (A) Apple n'a pas ranger cela du getgo, et (B) le problème est si obscur. Il devrait y avoir 10.000 AQ à ce sujet partout! Et bien. – Fattie