使用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的初始值的变量。 selectedObserverObservable 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

感谢您的阅读。如果您有任何疑问,请发表评论。