注意
pod 'RxCocoa-Texture', '3.x.x'
您的贡献始终受到欢迎!
概念
RxCocoa 为Cocoa和Cocoa Touch框架提供扩展,以利用RxSwift。Texture 提供了各种基本的UI组件,如ASTableNode、ASControlNode、ASButtonNode等。参看:Node 子类
因此,这个库为Texture框架提供扩展,以便像RxCocoa一样利用RxSwift。
参看:Texture + RxSwift Interactive Wrapper
示例
扩展
ASBinder
: 订阅观察者异步操作。
期望流程 | 期望UI |
但是,节点不知道在绘制UI之前已经在UI上应用了事件值。
非期望流程 | 非期望UI |
在这种情况下,节点应该使用setNeedsLayout。但是,[bind:_]不会自动调用setNeedsLayout。
通常,您可以像这样编写代码
// 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)
如果您使用ASBinder,则不需要调用setNeedsLayout。ASBinder将自动操作它。
// 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)
如果您不需要setNeedsLayout,则只需编写如下代码。
// 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流程 | 输出UI |
安装
RxCocoa-Texture可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中
swift 4.x
pod 'RxCocoa-Texture'
警告
这个库已经迁移到Texture 2.7。当Rx订阅逻辑从初始化移动到didLoad方法时,我就不再遇到这个问题。当使用RxSwift / RxCocoa时,从didLoad方法进行订阅是安全的。https://github.com/TextureGroup/Texture/issues/977
作者
Geektree0101, [email protected]
许可证
这个库属于RxSwiftCommunity。RxCocoa-Texture遵循MIT许可证。详见LICENSE文件获取更多信息。