使用RxSwift在ViewController之间传递数据
我2年前开始进行iOS开发,从Treehouse,Raywanderlich,objc.io和GitHub学习。我使用委托将数据从一个ViewController传递到另一个ViewController。我们可以使用RxSwift在几行代码中实现相同的任务。根据标准Rx代表文档
Rx是通过
Observable
接口表示的通用计算抽象。
像原始的Rx一样,RxSwift的目的是实现异步操作和事件/数据流的轻松组合。
KVO观察,异步操作和流都在序列抽象下统一。 这就是为什么Rx如此简单,优雅和强大的原因。
为了从rootViewController上的推送的viewController传递数据,我们可以轻松做到。
我们必须在SelectedDataVC类的ViewController类上传递数据,让我们深入了解一下。
1.使用CocoaPods,Carthage安装RxSwift和RxCocoa
2,在SelectedDataVC中添加变量和可观察变量
私人让selectedVariable =变量(“”)
var selectedObserver:Observable {
返回selectedVariable.asObservable()
}
selectedVariable是具有一些String的初始值的变量。 selectedObserver是Observable which
做一些工作,观察者可以对此做出反应。
当用户从SelectedDataVC中选择一些数据时,只需将数据值设置为selectedVariable
selectedVariable.value = selectedName
在ViewController类中添加DisposeBag。根据文档:
处理袋用于将类似ARC的行为返回给RX。 当DisposeBag被释放时,它将在每个添加的一次性物品上调用dispose。
现在,当某些用户单击加号图标以在ViewControllerVC中设置数据时,则SelectedDataVC将被推入堆栈。添加以下代码行:
让selectedItemVC = self.storyboard?.instantiateViewController(withIdentifier:“ SelectDataVC”)作为! SelectDataVC
selectedItemVC.selectedObserver
.subscribe(onNext:{[弱自我] selectedName在
如果selectedName.count> 0 {
self?.displayLabel.text = selectedName
}
} .disposed(作者:disposeBag)
self.navigationController?.pushViewController(selectedItemVC,animation:true)
在实例化SelectedDataVC的过程中,我们正在ViewController类中订阅SelectedDataVC的事件,每当selectedVariable值更改时,我们在ViewController类中的标签就会更新。
这是完整的演示代码:https://github.com/EonKid/RxSwiftDemo
感谢您的阅读。如果您有任何疑问,请发表评论。