swift – 无法分配给’Bool?’类型的不可变表达式?

尝试分配新值时,编译器会抛出错误
Cannot assign to immutable expression of type 'Bool?'

我上课了:

class Setting {
   struct Item {
      var text: String
      var selected: Bool?

      init(withText text: String) {
         self.text = text
         self.selected = nil  
      }

   var items: Any

   init(items:Any) {
      self.items = items
   }
}

在prepareForSegue的源视图控制器中:

let item = Setting.Item(withText: user.description)
let setting = Setting(items: [item])
destinationViewController.setting = setting

在目标视图控制器中:

class DestinationViewController: UITableViewController {
   var setting: Setting!
   override func viewDidLoad() {
      super.viewDidLoad()

      //this works
      _ = (setting.items as! [Setting.Item])[index].selected

      // this throws the error
      (setting.items as! [Setting.Item])[index].selected = false
   }
}

我将项目声明为Any,因为它可以包含[Items]或[[Items]].

如何使变量选择为可变?

(我希望这不是一个重复的问题,我发现了许多类似的问题,但无法解决这个问题.)

(setting.items as![Setting.Item])返回一个不可变的值.你不能在它上面执行变异功能.然而,你可以做什么,把它放在一个临时变量中,改变它,并将它分配回你的财产:
var temporaryVariable = (setting.items as! [Setting.Item])

temporaryVariable[index].selected = false

setting.items = temporaryVariable

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...