【问题标题】:How can I update an assignment in Swift?如何在 Swift 中更新作业?
【发布时间】:2017-04-25 21:50:59
【问题描述】:

我想知道如何执行以下操作:

var x = Observed<String>("hello")
label.text = x

x 的其他地方已更新:

x.value = "World"

然后label.text 会自动更新。到目前为止,这是我为Observed 提供的内容

class Observed<T> {
    typealias Observer = (T)->()

    var observer: Observer?

    var value: T {
        didSet {
            if let observer = observer {
                observer(value)
            }
        }
    }

    init(_ v: T) {
        value = v
    }
}

我相信这就是 RxSwift 等所做的,但这对我正在做的事情来说太过分了

【问题讨论】:

标签: swift generics observer-pattern


【解决方案1】:

在这种情况下,您可能应该只使用didSet

class YourClass {
   var x: String = "" { didSet {  someVC.someLabel.text = x } }
}

到目前为止,iOS 中没有“本机”数据绑定。

编辑:当然有 KVO,感谢@matt 的提醒 :)

【讨论】:

  • 这不是真的。一直存在键值观察,这就是所有数据绑定。当然,在 iOS 13 中(尽管您在写这个答案时可能不知道这一点),Combine 有效地使 RxSwift 成为原生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2012-06-04
  • 2021-08-12
  • 2019-09-06
  • 2017-09-23
  • 2019-10-13
相关资源
最近更新 更多