我正在尝试使用一些更新命名属性的默认方法创建一个协议。不幸的是如果我改变了方法变异的建议,然后我在使用了火法的角度得到一个错误,我得到一个错误Left side of mutating operator isn't mutable…
我可以更新协议扩展中的指定属性吗?
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
}
。 Cannot use mutating member on immutable value…
var weapons = [PhaseCannon()]
for weapon in weapons {
weapon.fire() // <- Error here
}
我不能这样做吗?
'PhaseCannon'是一个类或结构? –
@Aaron Bratcher你可以在这里使用'-fire()'和'-recharge()'关键字'mutating'来分享阶段加农炮类 –
;另一方面,在你的迭代中,你不能在不可变的本地类型上使用变异方法。 – holex