.驾驶
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?
任何帮助将不胜感激
Trait that represents observable sequence with following properties:
- it never fails
- it delivers events on
MainScheduler.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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。