.驾驶
searchController.rx.text .asDriver() .drive(onNext: { (element) in print(element) }).disposed(by: disposeBag)
.订阅
searchController.rx.text .asObservable() .subscribe(onNext: { (element) in print(element) }).disposed(by: disposeBag)
两个块的工作方式完全相同,使用.drive over .subscribe的目的是什么?在哪种情况下我们应该使用.drive over .subscribe?
任何帮助将不胜感激
驱动程序与Observable略有不同.来自文档:Trait that represents observable sequence with following propertIEs:
it never fails it delivers events onMainScheduler.instance
share(replay: 1,scope: .whileConnected)
sharing strategy
我假设searchController.rx.text永远不会失败,在这种情况下不需要共享.
所以我们只有一点让你的情况与众不同:
it delivers events on MainScheduler.instance
你可以自己检查一下.在订阅之前插入此内容并且您的事件将不会在主线程上传递:
.observeOn(ConcurrentdispatchQueueScheduler(qos: .background))
这就是我在我的代码中检查它的方式:
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) })
日志:
driver is on main thread: true
observable is on main thread: false
在哪种情况下我们应该使用.drive:
使用UI时.为什么?来自文档:
总结important
Use UIKit classes only from your app’s main thread or main dispatch queue,unless otherwise indicated. This restriction particularly applIEs to classes derived from UIResponder or that involve manipulating your app’s user interface in any way.
以上是内存溢出为你收集整理的反应式编程 – .subscribe和.drive之间的区别是什么全部内容,希望文章能够帮你解决反应式编程 – .subscribe和.drive之间的区别是什么所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)