加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

反应式编程 – .subscribe和.drive之间的区别是什么

发布时间:2020-12-14 02:26:39 所属栏目:百科 来源:网络整理
导读:我是反应式编程的新手,这是我正在尝试的 .驾驶 searchController.rx.text .asDriver() .drive(onNext: { (element) in print(element) }).disposed(by: disposeBag) .订阅 searchController.rx.text .asObservable() .subscribe(onNext: { (element) in prin
我是反应式编程的新手,这是我正在尝试的

.驾驶

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 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读