- Now support swift 5.x https://github.com/RxSwiftCommunity/RxCocoa-Texture/blob/swift-5.x
pod 'RxCocoa-Texture', '3.x.x'
RxCocoa provides extensions to the Cocoa and Cocoa Touch frameworks to take advantage of RxSwift. Texture provides various basic UI components such as ASTableNode, ASControlNode, ASButtonNode and so on. ref: Node Subclasses
So, This Library provides extensions to the Texture frameworks to take advantage of RxSwift like a RxCocoa
ref: Texture + RxSwift Interactive Wrapper
: Subscribed Observer operates asynchronously.
Expectation Flow | Expectation UI |
But, Node dosen't know that event value applied on UI before draw.
Unexpectation Flow | Unexpectation UI |
In this case, Node should use setNeedsLayout. but, [bind:_] doesn't call setNeedsLayout automatically.
Normally, you can use like this code
// Profile NetworkImage Node is default
// username, description is Optional
// *** self is usernameNode supernode
viewModel.username
.subscribe(onNext: { [weak self] text in
self?.usernameNode.rx.text(Node.usernameAttributes).onNext(text)
self?.setNeedsLayout() // Here
})
.disposed(by: disposeBag)
If you use ASBinder then you don't need call setNeedsLayout. ASBinder will operates it automatically.
// Profile NetworkImage Node is default
// username, description is Optional
// *** self is usernameNode supernode
viewModel.username
.bind(to: usernameNode.rx.text(Node.usernameAttributes),
setNeedsLayout: self)
.disposed(by: disposeBag)
// *** self is descriptionNode supernode
viewModel.desc
.bind(to: descriptionNode.rx.text(Node.descAttributes),
setNeedsLayout: self)
.disposed(by: disposeBag)
If you don't need setNeedsLayout then just write code like this.
// setNeedsLayout default is nil!
viewModel.username
.bind(to: usernameNode.rx.text(Node.usernameAttributes))
.disposed(by: disposeBag)
viewModel.desc
.bind(to: descriptionNode.rx.text(Node.descAttributes))
.disposed(by: disposeBag)
ASBinder Flow | Output UI |
RxCocoa-Texture is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'RxCocoa-Texture'
This library has been migrated to Texture 2.7. When Rx subscribe logic moves from initialization to didLoad method. I no longer faced this problem. When using RxSwift / RxCocoa, it is safe to subscribe from the didLoad method. TextureGroup/Texture#977
Geektree0101, h2s1880@gmail.com
This library belongs to RxSwiftCommunity. RxCocoa-Texture is available under the MIT license. See the LICENSE file for more info