名前付きプロパティを更新するいくつかの既定のメソッドでプロトコルを作成しようとしています。残念ながら、私は私が示唆したように変異する方法を変更した場合は、その後、私は火メソッドの使用時にエラーが発生します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はPhase-canononクラス –
を '-fire()'と '-recharge()'で 'mutating'を使って共有できます。一方、あなたの反復の中では、あなたは不変のローカル型に対してmutatingメソッドを使うことはできません。 – holex