swift - ReactiveSwift : how to rebind (remove old bindings, 添加新的)?

标签 swift reactive-swift

我有一个 View 必须能够定期重新绑定(bind)到一个新的 View 模型:这意味着删除旧的绑定(bind)以及连接新的绑定(bind)。我有一个有效的解决方案,但它不是线程安全的,我想知道是否有更惯用的方法来做同样的事情:

var disposeBag = CompositeDisposable()

func bind(viewModel: TopicProgressViewModel) {
    disposeBag.dispose()
    disposeBag = CompositeDisposable()

    disposeBag += self.reactive.isHidden <~ viewModel.isHidden
    disposeBag += height <~ viewModel.height
    disposeBag += label.reactive.text <~ viewModel.label
    disposeBag += progress.reactive.progress <~ viewModel.progressFraction
}

最佳答案

您应该使用 SerialDisposable

var dispose = SerialDisposable()

func bind(viewModel: TopicProgressViewModel) {
    var disposeBag = CompositeDisposable()
    // serialDisposable will automatic dispose previous inner disposable
    dispose.inner = disposeBag
    disposeBag += self.reactive.isHidden <~ viewModel.isHidden
    disposeBag += height <~ viewModel.height
    disposeBag += label.reactive.text <~ viewModel.label
    disposeBag += progress.reactive.progress <~ viewModel.progressFraction
}

关于swift - ReactiveSwift : how to rebind (remove old bindings, 添加新的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44288298/

相关文章:

swift - 在 Xcode Playgrounds 中实现 TouchBar 功能

Swift:将任何对象转换为 Int64 = nil

ios - 无法隐藏导航工具栏

ios - 如何以编程方式将 UIView 添加到 Swift 中的 UIScrollView?

swift - 使用 Reactive Swift 将 View 模型与 View 绑定(bind)

ios - 动态添加UIButton : action not getting registered

swift - ReactiveSwift : Retry up to n times, 然后执行一些代码

swift - ReactiveSwift 中包含字典的 MutableProperty

ios - ReactiveSwift 中 PublishSubject 的等价物是什么?

ios - Reactive Cocoa 5 和 ReactiveSwift 网络请求处理