获取不是循环数组并更改其属性时的可变错误

Getting isn't mutable error while looping through an array and changing its property

提问人:Kegham K. 提问时间:10/18/2018 最后编辑:Kegham K. 更新时间:10/18/2018 访问量:319

问:

我正在循环浏览一组篮球运动员,其中他们的 ID 等于某个球员的 ID。然后我想将 +1 添加到播放器对象的属性中。fouls

self.match.matchState.homePlayers.first{$0.id == toPlayer.id}?.fouls += 1

我有错误

mutating 运算符的左侧不可变:函数调用返回不可变值

该属性是一个可选的整数。 即使我将结构更改为类类型,我也有另一个错误。foulsvar fouls: int?Player

无法将不可变值作为 inout 参数传递:函数调用返回不可变值

那么我应该如何循环输入对象数组并更改其中的某个属性呢?

阵 列 迅速 映射 可变

评论

1赞 Mo Abdul-Hameed 10/18/2018
Cannot assign to property: function call 返回不可变值的可能重复项
0赞 Kegham K. 10/18/2018
@MoAbdul-Hameed,我以前见过这个问题,但即使我将结构更改为类时,我仍然遇到同样的问题。Player
0赞 Mo Abdul-Hameed 10/18/2018
它不应该使用类给你这个错误。下面是一个简单的示例:class Player { let id: Int var fouls: Int init(id: Int, fouls: Int) { self.id = id self.fouls = fouls } } let player1 = Player(id: 1, fouls: 2) let player2 = Player(id: 1, fouls: 3) let player3 = Player(id: 1, fouls: 4) let homePlayers = [player1, player2, player3] homePlayers.first{$0.id == 1}?.fouls += 1
0赞 Mo Abdul-Hameed 10/18/2018
只需更改为一个类并确保不是一个常量。Playerfouls
0赞 Kegham K. 10/18/2018
犯规不是常数,而是,但等等,这次的错误,我认为它是不同的。“无法将不可变值作为 inout 参数传递:函数调用返回不可变值”存在 inout 问题。var fouls: Int?

答:

0赞 Kegham K. 10/18/2018 #1

我将类型从结构更改为类 然后我找到了一种方法来更新对象属性,它现在工作正常,没有错误PlayerPlayerfouls

if toPlayer.fouls == nil {
   self.match.matchState.homePlayers.first{$0.id == toPlayer.id}?.fouls = toPlayer.fouls! + 1
}