当前位置: 首页 > 知识库问答 >
问题:

如何在RXSwift中间接观察单个?

傅阿苏
2023-03-14

因此,我有了这个存储库层,它返回一个single

func getNearby(origin: String, page: Int)-> Single<[MyObject]>

在我的ViewModel中,我有以下代码

private let _nearbyObservable: PublishSubject<[MyObject]> = PublishSubject()
var nearbyObservable: Single<[MyObject]> {return _nearbyObservable.asSingle()}

func loadNearby(origin: String, page: Int) {
        searchRepository
            .getNearby(origin: origin, page: page)
            .observe(on: scheduler)
            .subscribe(with: _nearbyObservable)
            .disposed(by: disposeBag)
    }

在我的ViewController中,我有

viewModel.loadNearby()
viewModel.nearbyObservable.subscribe(
            onSuccess: { objects in
                print(objects.count)
                print("Got a value: \(hitches)")
            },
            onFailure: { error in
                print("Something went wrong: \(error)")
            }
        ).disposed(by: disposeBag)

这不起作用。任何帮助都是非常感激的。

共有1个答案

施德元
2023-03-14

如果您希望VC订阅一次,那么将VMnearbyobservable的输出设置为single是没有意义的,所以您应该将其更改为observable。通过使用.subscribe(with:_NearbyObservable),您实际上是在转发发出的所有事件(包括将处置订阅的已完成事件),因此如果您想要维护当前的实现,您可以执行以下操作:(此代码可能可以工作,但不应该执行此操作)

private let _nearbyObservable: PublishSubject<[MyObject]> = PublishSubject()
var nearbyObservable: Observable<[MyObject]> {return _nearbyObservable }

func loadNearby(origin: String, page: Int) {
    searchRepository
        .getNearby(origin: origin, page: page)
        .observe(on: scheduler) // Not sure if this needs to be changed
        .subscribe(onSuccess: _nearbyObservable.onNext)
        .disposed(by: disposeBag)
}

和VC端:


viewModel.nearbyObservable.subscribe(
    onNext: { objects in
        print(objects.count)
        print("Got a value: \(hitches)")
    },
    onError: { error in
        print("Something went wrong: \(error)")
    }
).disposed(by: disposeBag)
viewModel.loadNearby()

 类似资料:
  • 此外,为什么Viewmodel不能观察到它自己的LiveData的变化?

  • 我来自同步编程背景,我很难理解可观察性。 这是我的服务/提供商的摘录(离子2项目) 我将从订阅它。关于这一点,我有几个问题。 > 即使我没有声明,上面的代码是否返回一个可观察/观察者? 响应是JSON。如何检查/处理JSON并执行一些操作,如 那就做吧 我认为应该在提供者类中完成。只是一个典型的提示/例子将是真棒。 当请求到达subscribe方法时,它是否真的发生了? 创建和返回Angular

  • 我试图检测一个可观察的(我的case按钮.rx.tap)是否在3秒钟内没有发出任何值。如果是,我想更新用户界面。以下是我迄今为止的尝试: 我的目标是在三秒钟内不点击按钮时使视图动画化。我已经尝试过扫描、不间断更改和防抖,但是我遇到的大多数组合运算符只有在项目被可观察的对象发出时才会发出项目。非常感谢任何帮助。

  • 我看到了很多关于让Rx延迟事件的每次发射的帖子:如何让RxJS可以观测到倒计时?,如何使用RxJava间隔运算符,在可观察项RxJava之间添加延迟,为发出的列表的每个项添加RxJava延迟,以及其他。 不过,我没有看到任何不同延迟的链接。 基本上,我有一个文本视图和一个字母列表,我想: 将文本设置为第一个字母 等待1500ms 将文本设置为null 等待500ms 将文本设置为第二个字母 等待1

  • 对于LiveData和MVVM架构,我完全是个新手。我想知道如何观察一个实时数据 我通过以下方式从我的房间数据库中获取实时数据: 我希望ViewModel中的另一个变量,,在列表返回空(null)时进行更新。这将用于从Visible更新片段中的ImageView。去看电视了。看得见的 我如何检查如果是空的同步? 我四处阅读,看到一些人说使用,但是架构指南明确建议不要使用ViewModel中的任何观

  • 问题内容: 一个人如何监视/触发一条路线上的事件? 问题答案: 以下事件也可用(它们的回调函数采用不同的参数): $ routeChangeSuccess $ routeChangeError $ routeUpdate-如果将reloadOnSearch属性设置为false