【发布时间】:2019-11-05 08:50:13
【问题描述】:
在我关注的 Ray 教程中,我设置了以下属性
struct ContentView : View {
var rTarget = Double.random(in: 0..<1)
var gTarget = Double.random(in: 0..<1)
var bTarget = Double.random(in: 0..<1)
}
这些当然是不可变的,所以我不能从 func 修改它们,除非我将该 func 标记为变异
func reset() {
rTarget = Double.random(in: 0..<1)
gTarget = Double.random(in: 0..<1)
bTarget = Double.random(in: 0..<1)
}
Cannot assign to property: 'self' is immutable
但是我从var body调用这个函数
mutating func reset() {
rTarget = Double.random(in: 0..<1)
gTarget = Double.random(in: 0..<1)
bTarget = Double.random(in: 0..<1)
}
fileprivate mutating func displayAlert() -> Alert {
return Alert(title: Text("Your Score"), message: Text("\(computeScore())"), dismissButton: Alert.Button.destructive(Text("Ok"), onTrigger: {
self.reset()
}))
}
var body: some View {
Button(action: {
self.showAlert = true
}) {
Text("Hit Me!")
}.presentation($showAlert) {
displayAlert()
}
}
Cannot use mutating member on immutable value: 'self' is immutable
但我不能将var body 标记为mutating var
'mutating' may only be used on 'func' declarations
所以此时,我想在用户每次点击警报按钮时重置 xTarget 值,我不知道此时会有什么好的做法。
【问题讨论】: