数组中的值不更新

Posted

技术标签:

【中文标题】数组中的值不更新【英文标题】:Value does not update in array 【发布时间】:2017-08-11 01:17:46 【问题描述】:

当我在这里搜索时,我现在知道 Swift 中的几乎所有内容都是基于值的,而不是基于引用的。我还读过一个类包含引用。我尽力了,但下面的代码不会打印任何东西。如果有人可以帮助我在数组的帮助下打印出那条线,那就太好了:)(如果可能的话……)。

编辑:我想要数组中有 5 个布尔值,它们都有一个 didSet 方法。当我访问它们时,该特定的 didSet 将触发。这可能吗?

class PowerUpBooleans
    var boolean: Bool
    init(boolean: Bool)
        self.boolean = boolean
    

var iWantToChangeThis = false
        didSet
            print("it worked")
        
    
    var powerUpBooleans = [PowerUpBooleans]()
override func viewDidLoad() 
        super.viewDidLoad()
        powerUpBooleans.append(PowerUpBooleans(boolean: iWantToChangeThis))
        powerUpBooleans[0].boolean = true
     

【问题讨论】:

Bool 是按值传递,而不是按引用传递 @koropok 是的,但是有没有可以在数组中保留对该布尔值的引用?或者这根本不可能?谢谢。 你可以试试下面的答案,或者用inout。 @koropok 我将搜索 inout 方法。我编辑了我的问题,以更清楚地说明我想要什么。我想对所有变量都有一个 didSet 方法。 你可以看看这个。 ***.com/questions/40745099/… 【参考方案1】:

我猜你想设置一些有自己触发器的布尔值。

据我所知,类包裹的值类型只能是引用类型。

所以试试这个。

class PowerUpBooleans
  var boolean: Bool 
    didSet 
      trigger()
    
  
  var trigger: () -> ()

  init(boolean: Bool, trigger: @escaping () -> ())
    self.boolean = boolean
    self.trigger = trigger
  


let trigger1 = 
  print("one worked.")

let trigger2 = 
  print("two worked.")


var powerUpBooleans = [PowerUpBooleans]()
powerUpBooleans.append(PowerUpBooleans(boolean: false, trigger: trigger1))
powerUpBooleans.append(PowerUpBooleans(boolean: false, trigger: trigger2))
powerUpBooleans[0].boolean = true   // print one worked
powerUpBooleans[1].boolean = false  // print two worked

【讨论】:

这就是答案

以上是关于数组中的值不更新的主要内容,如果未能解决你的问题,请参考以下文章

如果 Laravel 中的值不为空,如何验证输入字段

JSON中的值不显示在tableviewcell自定义中

循环和结构数组时打印的值不正确

二维数组中的查找

offsetTop获取的值不正确

RedBeanPHP:Find 中的值不起作用