我试图获取异步生成的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))
}
}
这没有执行,也没有任何值传递给函数,我不确定为什么
您的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
}
是没有订阅者的观察对象。