【问题标题】:How to identify that String value change or not如何识别该字符串值是否更改
【发布时间】:2021-07-06 10:58:48
【问题描述】:

如何识别现有字符串值是否更改?

var envURLValueChange: String(){
    willSet{}
    didSet{}
}
 if (envURLValueChange.oldValue != envURLValueChange.currentValue){
 // Then do you stuff
}

【问题讨论】:

  • 您的问题中已经有了答案的种子。你已经创建了空的 willSet 和 didSet 闭包。如果您需要在字符串值更改后知道,请将您的逻辑放在 didSet 的主体中。如果您想知道更改发生之前,请将您的代码放在 willSet 的主体中。完成。
  • @DuncanC 我已经完成 willSet didSet 未能将逻辑放入闭包中,感谢您的输入。

标签: swift string


【解决方案1】:

你可以使用观察

class ViewController: UIViewController {
    
    @objc dynamic var envURLValueChange: String = ""
    
    var observation: NSKeyValueObservation?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        observation = self.observe(\.envURLValueChange, options: [.old, .new]) { controller, value in
            print(value.oldValue)
            print(value.newValue)
        }
        
    }
}

【讨论】:

  • 在场景委托中如何处理?
  • 在场景委托中做同样的事情并使用 willConnectTo 代替 viewDidLoad
  • 这不是 willSet/didSet 已经为你做的吗?并且无需创建额外的属性并使用@objc?
  • @JoakimDanielson 没有区别,两者都是一样的。我只是试图给出不同的答案。
  • 但是为什么要建议一些更复杂的东西,你真的自己用这个而不是 willSet/didSet 吗?
【解决方案2】:

不确定你的问题是什么,但我想我明白了。你可以这样做:

var envURLValueChange: String = "" {
   willSet {
       if newValue != envURLValueChange {
          // Do stuff here   
       }
   }
   didSet {
       if oldValue != envURLValueChange {
          // Do stuff here   
       }
   }
}

您最好选择willSetdidSet 之一。如果您想在值更改之前执行代码,则使用 willSet 否则使用 didSet

【讨论】:

    【解决方案3】:

    无需额外步骤。请先检查文档。 Property observers

       var yourValue = "" {
            didSet {
                // do stuff here
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-26
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      相关资源
      最近更新 更多