有关Swift中可选变量操作的问题

时间:2019-09-17 06:27:07

标签: ios swift

我将变量设置为可选,从服务器获取变量的值,并尝试在每次按下按钮时将其递增。

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

我可以解决此错误并正常增加可选变量的值吗?

2 个答案:

答案 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时执行某些操作的情况下才有效。