# RxBinding **Repository Path**: megatronxx/RxBinding ## Basic Information - **Project Name**: RxBinding - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-04 - **Last Updated**: 2021-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RxBinding [![CI Status](https://img.shields.io/travis/RxSwiftCommunity/RxBinding.svg?style=flat)](https://travis-ci.org/RxSwiftCommunity/RxBinding) [![Version](https://img.shields.io/cocoapods/v/RxBinding.svg?style=flat)](https://cocoapods.org/pods/RxBinding) [![License](https://img.shields.io/cocoapods/l/RxBinding.svg?style=flat)](https://cocoapods.org/pods/RxBinding) [![Platform](https://img.shields.io/cocoapods/p/RxBinding.svg?style=flat)](https://cocoapods.org/pods/RxBinding) [![swift](https://img.shields.io/badge/swift-5.0-orange.svg)](https://github.com/RxSwiftCommunity/RxBinding/releases) RxBinding provides `~>`, `<~>` and `~` operators for data binding using RxSwift, to replace the `bind(to:)` and `disposed(by:)` method in RxSwift. RxBinding is inspired by the following operators. - The `<->` operator in RxBiBinding (https://github.com/RxSwiftCommunity/RxBiBinding) - The `<~` operator in ReactiveCocoa (https://github.com/ReactiveCocoa/ReactiveCocoa) ## Documentation RxBinding is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby pod 'RxBinding' ``` With `@_expoerted import`, the operators can be used in the all file of the project. ```Swift @_exported import RxBinding ``` #### Usage of `~>` The type of `text` is `Observable` and the type of `label.rx.text` is `Binder`. RxSwfit provides the following method for the one way data binding between them. ```Swift viewModel.text.bind(to: label.rx.text).disposed(by: disposeBag) ``` With the operators `~>` (`bind(to:)`) and `~` (`disposed(by:)`) in RxBinding, we can bind with the following simple code. ```Swift viewModel.text ~> label.rx.text ~ disposeBag ``` Bind an observable object to multiple binders. ```Swift viewModel.text ~> [label1, label2].map { $0.rx.text } ~ disposeBag ``` #### Usage of `<~>` The type of `text` is `BehaviorRelay` and the type of `textFeild.rx.text` is `ControlProperty`. To apply the two way data binding between them, we need the following code by RxSwift. ```Swift viewModel.text.bind(to: textFeild.rx.text).disposed(by: disposeBag) textFeild.rx.text.bind(to: viewModel.text).disposed(by: disposeBag) ``` With the `<~>`, a simple two way bind operator, and `~` (`disposed(by:)`) in RxBinding, we can do the same thing with the following simple code. ```Swift viewModel.text <~> textFeild.rx.text ~ disposeBag ``` #### Multiple Bindings RxBinding supports using a single `disposeBag` for multiple binding operators like this: ```Swift disposeBag ~ [ viewModel.text <~> textFeild.rx.text, viewModel.uppercaseText ~> label.rx.text, viewModel.charactersCount ~> [characterCountLabel1, characterCountLabel2].map { $0.rx.text } ] ``` or this: ```Swift viewModel.text <~> textFeild.rx.text ~ viewModel.uppercaseText ~> label.rx.text ~ viewModel.charactersCount ~> [characterCountLabel1, characterCountLabel2].map { $0.rx.text } ~ disposeBag ``` ## RxCocoa RxBinding also supports `Driver` and `Signal` of the RxCocoa module. You can use `~>` operator to replace the `drive()` and `emit(to:)` method. ## NEED YOUR HELP **I am considering how to remove the operator ~ after the Binder or the ControlEvent property.** ```Swift viewModel.text ~> label.rx.text ``` If anyone has a good idea about this, please contact me here https://github.com/RxSwiftCommunity/RxBinding/issues/1 or create a PR. Thanks. The operator `~>` is equal to `bind(to:)`. ```swift viewModel.text ~> label.rx.text ``` is euqals to ```swift viewModel.text.bind(to: label.rx.text) ```` I mean how to combine the method `disposed(by:)` into the operator `~>`. ## Example To run the example project, clone the repo, and run `pod install` from the Example directory first. ## Author lm2343635, lm2343635@126.com ## License RxBinding is available under the MIT license. See the LICENSE file for more info.