J'essaie de créer un protocole avec des méthodes par défaut qui mettent à jour une propriété nommée. Malheureusement, je reçois une erreur Left side of mutating operator isn't mutable…
Puis-je mettre à jour la propriété spécifiée dans l'extension de protocole?
protocol Weapon {
var energy: Int { get set }
var fireEnergy: Int { get }
var rechargeRate: Int { get }
func fire()
func recharge()
}
extension Weapon {
var fireEnergy: Int {
return 10
}
var rechargeRate: Int {
return 2
}
func fire() {
guard energy >= fireEnergy else { return }
energy -= fireEnergy // <- Error Here
}
func recharge() {
energy += rechargeRate // <- Error Here
}
}
class PhaseCannon: Weapon {
var energy = 0
}
Si je change les méthodes pour muter comme suggéré, je reçois une erreur au point d'utilisation pour la méthode d'incendie. Cannot use mutating member on immutable value…
var weapons = [PhaseCannon()]
for weapon in weapons {
weapon.fire() // <- Error here
}
Puis-je pas faire cela?
'PhaseCannon' est une classe ou un struct? –
@Aaron Bratcher pouvez-vous partager Phase Canon classe –
en utilisant le mot-clé 'mutation 'à' -fire() 'et' -recharge() 'probablement nécessaire ici; D'autre part, à l'intérieur de votre itération, vous ne pouvez pas utiliser la méthode de mutation sur un type local immuable. – holex