Tro*_*yer 8 reactive-programming rx-swift reactivex
我是反应式编程的新手,这是我正在尝试的
.驾驶
searchController.rx.text
.asDriver()
.drive(onNext: { (element) in
print(element)
}).disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
.订阅
searchController.rx.text
.asObservable()
.subscribe(onNext: { (element) in
print(element)
}).disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
这两个区块的工作完全一样,什么是使用的目的.drive了.subscribe?在这情况下,我们应该使用.drive过.subscribe?
任何帮助将不胜感激
iWh*_*Buy 17
Driver有点不同Observable.来自文档:
表示具有以下属性的可观察序列的特征:
- 它永远不会失败
- 它提供活动
MainScheduler.instanceshare(replay: 1, scope: .whileConnected)分享策略
我认为searchController.rx.text永远不会失败,share在这种情况下不需要.
所以我们只有一点让你的情况与众不同:
- 它提供活动
MainScheduler.instance
你可以自己检查一下.在subscribe插入此内容之前,您的事件将不会在主线程上传递:
.observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
Run Code Online (Sandbox Code Playgroud)
这就是我在我的代码中检查它的方式:
something
.asObservable()
.observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
.subscribe(onNext: { _ in
print("observable is on main thread: ", Thread.isMainThread)
})
something
.asDriver()
.drive(onNext: { _ in
print("driver is on main thread: ", Thread.isMainThread)
})
Run Code Online (Sandbox Code Playgroud)
日志:
驱动程序在主线程上:true
observable在主线程上:false
在哪种情况下我们应该使用.drive:
使用UI时.为什么?来自文档:
重要
除非另有说明,否则仅从应用程序的主线程或主调度队列中使用UIKit类.此限制特别适用于从UIResponder派生的类或涉及以任何方式操纵应用程序的用户界面的类.
| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |