【问题标题】:How do i get rid of Objective-C's KVO in Swift? [closed]如何在 Swift 中摆脱 Objective-C 的 KVO? [关闭]
【发布时间】:2020-12-03 06:46:33
【问题描述】:

Swift 版本 5.3.1
Xcode 12.2

作为标题。
当我更新将自动计算的 delta.a.value 或 delta.b.value 增量值。 Delta.value 与 UI 相关
这是 Swift 中的好方法吗?

struct Component {
    var value = 0
}

struct Delta {
    let a: Component
    let b: Component
    var value = 0       //  equation: a.value - b.value
    
    init(a: Component, b: Component) {
        self.a = a
        self.b = b
    }
}

let a = Component()
let b = Component()
let delta = Delta(a: a, b: b)
delta.a.value = 100
delta.b.value = 20
//  result: delta.value = 80

【问题讨论】:

  • 您问的内容与 KVO 有什么关系?似乎您只想要一个计算属性
  • @Sweeper 我想摆脱 KVO,并在纯 Swift 中观察对象。
  • 但是你不需要观察任何东西,更不用说KVO了。你只需要一个computed property
  • @Sweeper 谢谢。我只是在寻找一个好方法并快速练习。 delta.value 与 UI 有关。

标签: swift key-value-observing


【解决方案1】:

嗯,在我看来,解决问题的唯一方法是快速使用值观察。例如:

var delta = Delta() {
    didSet {
        // Do all required operation& You can use delta value which already has updated value
    }
}

试试吧,也许对你有帮助

UPD:解决问题的一种方法

struct Component {
    var value = 0
}

struct Delta {
    var a: Component {
        didSet {
            updateDelta()
        }
    }
    var b: Component {
        didSet {
            updateDelta()
        }
    }
    var value = 0       //  equation: a.value - b.value
    
    init(a: Component, b: Component) {
        self.a = a
        self.b = b
    }
    
    private mutating func updateDelta() {
        self.value = a.value - b.value
    }
}

【讨论】:

  • 请举例说明“当我更新 delta.a.value 或 delta.b.value 时会自动计算 delta.value”。
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 2019-08-19
  • 2010-10-12
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多