我正在使用Deeplink打开我的应用程序,因此,如果点击a按钮,则用户会收到一封电子邮件,依次单击该链接并将其定向到他/她当前所在的页面。我正在使用MVVM体系结构,并且我希望能够基于从api调用获得的结果进行更改,该调用是在用户返回到App时发生的,但是我无法使Observable响应于Api响应
init(routeManager: RouteMatchResult?, provider: Api, currentEmail: String?) {
self.routeManager = BehaviorRelay(value: routeManager)
self.currentEmail = BehaviorRelay(value: currentEmail)
nightModeEnabled = BehaviorRelay(value: ThemeType.currentTheme().isDark)
super.init(provider: provider)
self.dataXXX.accept(())
// loadInvite()
}
func transform(input: Input) -> Output {
dataXXX.asObservable().subscribe({_ in
print("DDDD=========++++++++++++==========DDDDD")
}).disposed(by: rx.disposeBag)
return Output()
}
但是,如果我取消注释loadInvite()
的代码在该函数中运行,并且试图让dataXXX
进行订阅将不起作用
func loadInvite() {
routeManager.errorOnNil().asObservable()
.flatMapLatest { (code) -> Observable<RxSwift.Event<User>> in
log("=========++++++++++++==========")
// guard let code = code else {return}
let params = code.values
return self.provider.postVerifyApp(challengeId: code)
.trackActivity(self.loading)
.trackError(self.error)
.materialize()
}.subscribe(onNext: { [weak self] (event) in
log("=========++++++++++++==========+++++++++++", .fuck)
switch event {
case .next(let token):
log(token)
if token.data != nil {
self?.dataStatuBool.accept(true)
self?.dataStatus.onNext(true)
log("=========++++++++++ TRUE ========+++++++++++", .fuck)
self?.homeData.onNext(())
} else {
self?.nilData.onNext(())
self?.dataStatuBool.accept(false)
self?.dataStatus.onNext(false)
log("=========+++++++++ FALSE ======+++++++++++", .fuck)
}
case .error(let error):
log(error.localizedDescription)
default: break
}
}).disposed(by: rx.disposeBag)
nilData.asObservable().flatMapLatest { () -> Observable<EmailSharingViewModel> in
print("SUBBBBBBB XXX")
let viewModel = EmailSharingViewModel(provider: self.provider)
return Observable.just(viewModel)
}.subscribe()
.disposed(by: rx.disposeBag)
}
}
答案 0 :(得分:0)
我认为这里的主要问题是,当您self.dataXXX.accept(())
进行观察时,尚未订阅。通常,在MVVM体系结构中,您的订阅应在视图控制器的viewDidLoad()中进行,而不是在视图模型中进行,视图模型仅负责组成和公开所需的所有可观察对象,并在视图控制器中进行订阅。
在此处检查示例:https://github.com/uptechteam/Coordinator-MVVM-Rx-Example/tree/master/MVVM-Rx/RepoSearcher/Classes/RepositoryList