Rxswift地图和邮编未调用

问题描述 投票:1回答:1

我试图获取异步生成的2个可观察对象的元素,并在接收到它们之后将它们作为参数传递给函数。

但是我下面的ViewModel中的地图运算符未执行,断点只是跳过它。

ViewModel.swift

init(api: ApiService) {
        self.api = api
    }

func getData1() -> Observable<Data1> {
        return api.getData1()
    }

    func getData2()  -> Observable<NewViewModel> {
        return Observable.create { observer in

            let disposable = Disposables.create()
            self.api.getData2()
            .map {
                $0.arrayOfStuff.forEach { (stuff) in
                    let background = stuff.background

                let newViewModel = NewViewModel( background: self.spotlightBackground)
                observor.onNext(newViewModel)
                }
            return disposable
            }
        }

在我的ViewController中,我正在创建可观察对象的Zip,因为newViewModel [getData2]可能稍后返回,并且我想在两个可观察对象都发出值时调用该函数

在我的viewDidLoad()中,我通过订阅和添加可观察对象来设置zip

let zippy = Observable.zip(viewModel.getData1(), viewModel.getData2()).subscribe(onNext: { (data1, newViewModel) in
            self.layoutSetUp(data1: data1, newViewModel: newViewModel)
            })
        zippy.disposed(by: disposeBag)

private func layoutSetUp(data1: Data1, newViewModel: NewViewModel) {


        DispatchQueue.main.async {
                self.view = SwiftUIHostingView(rootView: SwiftUIContentView(data1: data1, newViewModel: newViewModel))
        }
    }

这没有执行,也没有任何值传递给函数,我不确定为什么

swift swiftui rx-swift
1个回答
0
投票

您的getData2方法从不发出值,因此zip也不发出。该方法中的代码有些混乱,以至于我无法理解您要执行的操作,因此我无法准确告诉您所需的内容,但是我can说,当您观察到没有订阅的内容时到,则不会发出值。

此位:

self.api.getData2()
    .map {
        $0.arrayOfStuff.forEach { (stuff) in
            let background = stuff.background

            let newViewModel = NewViewModel(background: self.spotlightBackground)
            observor.onNext(newViewModel)
        }
        return disposable
    }

是没有订阅者的观察对象。

© www.soinside.com 2019 - 2024. All rights reserved.