切换视图模型与平面地图 swift.



>我有一个视图模型,我正在执行基于布尔值的检查。对/错。此值传递到PublishSubject<Bool>()现在我想使用 flatMapLatest 获取最新值,并根据 True/False 的值使用另一个不同的 ViewModel 进行导航

routeManager.errorOnNil().asObservable()
            .flatMapLatest { (code) -> Observable<RxSwift.Event<User>> in
            let params = code.values
                let challengeId = Int(params["challengeId"] as? String ?? "0")
            return self.provider.postVerifyApp(challengeId: login.challengeId!)
            .trackActivity(self.loading)
            .trackError(self.error)
            .materialize()
        }.subscribe(onNext: { [weak self] (event) in
            switch event {
            case .next(let token):
                log(token)
                if token.data != nil {
                    self?.dataStatus.onNext(true)
                } else {
                    self?.dataStatus.onNext(false)
                }
            case .error(let error):
                log(error.localizedDescription)
            default: break
            }
        }).disposed(by: rx.disposeBag)

在哪里切换

dataStatus.flatMapLatest { (status) -> ViewModel in
            if status {
                let viewModel = XXXViewModel(provider: self.provider)
                return viewModel
            } else {
                let viewModel = YYYYViewModel(provider: self.provider)
                return viewModel
            }
        }.subscribe()
            .disposed(by: rx.disposeBag)

这会产生错误Instance method 'flatMapLatest' requires that 'ViewModel' conform to 'ObservableConvertibleType'

.flatMapLatest.flatMapObservable类型作为其闭包的返回值。 您需要返回包装在可观察量中的viewModel.flatMapLatest会将其扁平化,当您订阅时,您将获得viewModel对象。

dataStatus.flatMapLatest { (status) -> Observable<ViewModel> in
            if status {
                let viewModel = XXXViewModel(provider: self.provider)
                return Observable.just(viewModel)
            } else {
                let viewModel = YYYYViewModel(provider: self.provider)
                return Observable.just(viewModel)
            }
        }.subscribe()
        .disposed(by: rx.disposeBag)

最新更新