【问题标题】:Getting isn't mutable error while looping through an array and changing its property循环遍历数组并更改其属性时获取不是可变错误
【发布时间】:2018-10-17 21:25:46
【问题描述】:

我正在遍历一组篮球运动员,其中他们的 id 等于某个球员的 id。然后我想在播放器对象的fouls 属性中添加 +1。

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

我有错误

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

fouls 属性是一个可选整数。 var fouls: int? 即使我将 Player 结构更改为类类型,我也遇到了另一个错误。

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

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

【问题讨论】:

  • @MoAbdul-Hameed 我以前看到过这个问题,但即使我将Player 结构更改为一个类,我仍然遇到同样的问题。
  • 使用类不应该给你这个错误。这是一个简单的例子: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
  • 只需将Player 更改为一个类并确保fouls 不是常量。
  • 犯规不是一个常数,它是var fouls: Int?,但这次等待错误,我认为它有所不同。 “不能将不可变值作为 inout 参数传递:函数调用返回不可变值”存在 inout 问题。

标签: arrays swift mapping mutable


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多