RxBinding 0.5

RxBinding 0.5

[Meng Li] 维护。



 
依赖
RxSwift~> 6
RxCocoa~> 6
 

RxBinding

CI Status Version License Platform swift

RxBinding 为使用 RxSwift 进行数据绑定提供了 ~><~>~ 操作符,以替换 RxSwift 中的 bind(to:)disposed(by:) 方法。

RxBinding 启发于以下操作符。

文档

RxBinding 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行

pod 'RxBinding'

使用 @_expoerted import,操作符可以在项目的所有文件中使用。

@_exported import RxBinding

使用 ~>

text 的类型为 Observable<String?>,而 label.rx.text 的类型为 Binder<String?>。RxSwift 为它们之间的一对一数据绑定提供了以下方法。

viewModel.text.bind(to: label.rx.text).disposed(by: disposeBag)

使用 RxBinding 中的操作符 ~>bind(to:))和 ~disposed(by:)),我们可以用以下简单代码进行绑定。

viewModel.text ~> label.rx.text ~ disposeBag

将可观察对象绑定到多个绑定器。

viewModel.text ~> [label1, label2].map { $0.rx.text } ~ disposeBag

使用 <~>

text 的类型是 BehaviorRelay<String?>,而 textFeild.rx.text 的类型是 ControlProperty<String?>。为了在这两者之间应用双向数据绑定,我们需要以下 RxSwift 代码。

viewModel.text.bind(to: textFeild.rx.text).disposed(by: disposeBag)
textFeild.rx.text.bind(to: viewModel.text).disposed(by: disposeBag)

使用 <~> 二向绑定操作符 和 RxBinding 中的 ~ (disposed(by:)),我们可以用以下简代码做同样的事情。

viewModel.text <~> textFeild.rx.text ~ disposeBag

多绑定

RxBinding 支持为多个绑定操作符使用单个 disposeBag,如下所示

disposeBag ~ [
    viewModel.text <~> textFeild.rx.text,
    viewModel.uppercaseText ~> label.rx.text,
    viewModel.charactersCount ~> [characterCountLabel1, characterCountLabel2].map { $0.rx.text }
]

或这样

viewModel.text <~> textFeild.rx.text ~
viewModel.uppercaseText ~> label.rx.text ~
viewModel.charactersCount ~> [characterCountLabel1, characterCountLabel2].map { $0.rx.text }
  ~ disposeBag

RxCocoa

RxBinding 也支持 RxCocoa 模块的 DriverSignal。你可以使用 ~> 操作符来替代 drive()emit(to:) 方法。

需要您的帮助

我正在考虑如何在 Binder 或 ControlEvent 属性之后移除 ~ 操作符。

viewModel.text ~> label.rx.text

如果有任何好的想法,请在此处联系我 https://github.com/RxSwiftCommunity/RxBinding/issues/1 或创建一个 PR。谢谢。

~> 操作符等于 bind(to:)

viewModel.text ~> label.rx.text

等同于

viewModel.text.bind(to: label.rx.text)

我的意思是,如何将方法 disposed(by:) 结合到操作符 ~> 中。

示例

要运行示例项目,首先克隆仓库,然后在Example目录中运行pod install

作者

lm2343635, [email protected]

许可协议

RxBinding遵守MIT许可协议。有关更多信息,请参阅LICENSE文件。