Карта Rxswift и почтовый индекс не называются - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь получить элемент из 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))
        }
    }

Это не выполняется, и никакие значения не передаются в функцию, и я не уверен, почему

1 Ответ

0 голосов
/ 21 февраля 2020

Ваш метод getData2 никогда не генерирует значение, поэтому и zip не будет. Код в методе слишком запутан, чтобы я мог понять, что вы пытаетесь сделать, поэтому я не могу точно сказать, что вам нужно, но я могу сказать, что когда у вас есть наблюдаемое, то ничего подписан, то не будет выдавать значение.

Этот бит:

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

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

Наблюдаемый без подписчиков.

...