gpt4 book ai didi

reactive-programming - .subscribe 和 .drive 有什么区别

转载 作者:行者123 更新时间:2023-12-04 05:11:30 25 4
gpt4 key购买 nike

我是响应式(Reactive)编程的新手,这就是我正在尝试的

.drive

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 的目的是什么?在 .subscribe ?在哪种情况下我们应该使用 .drive.subscribe ?

任何帮助将不胜感激

最佳答案

DriverObservable 有点不同.从文档:

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永不失败, share在这种情况下不需要。
因此,我们只有一点使它们在您的情况下有所不同:
  • it delivers events on MainScheduler.instance

你可以自己检查一下。之前 subscribe插入此内容,您的事件将不会在主线程上传递:
.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 :
一起工作时用户界面 .为什么?从文档:

Important

Use UIKit classes only from your app’s main thread or maindispatch queue, unless otherwise indicated. This restrictionparticularly applies to classes derived from UIResponder or thatinvolve manipulating your app’s user interface in any way.

关于reactive-programming - .subscribe 和 .drive 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48114274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com