如何将多个观察者绑定到一个 ControlProperty

Posted

技术标签:

【中文标题】如何将多个观察者绑定到一个 ControlProperty【英文标题】:How to bind multiple observers to one ControlProperty 【发布时间】:2016-11-23 13:46:10 【问题描述】:

我需要将slider.rx.value 绑定到 2 个具有不同映射的观察者。

slider.rx.value.map   [unowned self] in self.formatter.string(from: NSNumber(value: $0)) ?? "" 
    .bindTo(textFieldAlpha.rx.text)
    .addDisposableTo(disposeBag)

slider.rx.value.map  Enhance.Global(alpha: $0) 
    .bindTo(enhance)
    .addDisposableTo(disposeBag)

但我似乎只有最后一个绑定有效。如何做到这一点?

【问题讨论】:

【参考方案1】:

这能实现你想要的吗?

let observable = slider.rx.value.shareReplay(1)

observable.map   [unowned self] in self.formatter.string(from: NSNumber(value: $0)) ?? "" 
    .bindTo(textFieldAlpha.rx.text)
    .disposed(by: disposeBag)

observable.map  Enhance.Global(alpha: $0) 
    .bindTo(enhance)
    .disposed(by: disposeBag)

如果您不需要缓冲区,则可以选择

let observable = slider.rx.value.share()

这里还有一个不错的 RxSwift 备忘单的链接https://www.cheatography.com/donghua-li/cheat-sheets/rxswift-operators/

【讨论】:

嗯,从文档中看我需要shareReplay(1) 进行绑定并不明显,但这可能是因为我是 Rx 的新手。我也不需要重播缓冲区,所以share() 对我来说就足够了。谢谢!

以上是关于如何将多个观察者绑定到一个 ControlProperty的主要内容,如果未能解决你的问题,请参考以下文章

如何将 TabControl 的项目绑定到 wpf 中的可观察集合?

如何将可观察集合绑定到 xamarin 中的 flexlayout?

如何将可观察对象发布的整数变量绑定到 SwiftUI 中的 textField?

如何告诉 SwiftUI 视图绑定到多个嵌套的 ObservableObject

如何将图像源绑定到 ngFor 循环内的可观察对象?

如何在 SwiftUI 中使用可观察对象并与 NavigationLink 绑定?