我将变量设置为可选,从服务器获取变量的值,并尝试在每次按下按钮时将其递增。
var page: Int? //Received data from previous VC
@IBAction func nextPage(_ sender: Any) {
(page ?? 0) +=1
}
但是此代码会导致错误。
Left side of mutating operator isn't mutable: '??' returns immutable value
我可以解决此错误并正常增加可选变量的值吗?
答案 0 :(得分:4)
最初page
变量为nil,因此左侧将通过??
运算符降为0,因此基本上您是在尝试执行以下代码:
0 += 1
错误消息恰好告诉您-表达式的左侧是不可变的,因为0文字是不可变的。
您可以通过以下方法对其进行修复:
page = (page ?? 0) + 1
如果page
为nil,它将执行为:
page = 0 + 1
如果有一个值,则为:
page = page + 1
答案 1 :(得分:4)
虽然米兰的answer绝对正确,但我认为值得一提的是,您还可以考虑将page属性更改为默认值为0的非可选变量。这会简化您的逻辑,因为您不需要将其作为可选内容来处理(展开等)。
var page: Int = 0 //Received data from previous VC - defaults to 0
@IBAction func nextPage(_ sender: Any) {
page += 1
}
这显然只有在没有其他代码专门在page值为nil时执行某些操作的情况下才有效。