Ios RxSwift在另一个可观察下一个中设置可观察值,不工作

Ios RxSwift在另一个可观察下一个中设置可观察值,不工作,ios,rx-swift,Ios,Rx Swift,我不熟悉ios和rxswift。正在尝试为新应用程序创建mvvm体系结构 若我在调用appStartNetwork.fetchApp()之前设置了可观察的isSuccess值,我就可以观察该值。但当我在“下一步”上设置fetchApp()中的isSuccess值时,无法触发viewcontroller中的观察者 怎么了 视图模型 class SplashViewModel { var isSuccess = PublishSubject<Bool>() var isLoading =

我不熟悉ios和rxswift。正在尝试为新应用程序创建mvvm体系结构

若我在调用appStartNetwork.fetchApp()之前设置了可观察的isSuccess值,我就可以观察该值。但当我在“下一步”上设置fetchApp()中的isSuccess值时,无法触发viewcontroller中的观察者

怎么了

视图模型

class SplashViewModel {
var isSuccess = PublishSubject<Bool>()
var isLoading = PublishSubject<Bool>()

private let bag = DisposeBag()
func fetchAppStart() {
    self.isLoading.onNext(true)

    let appStartNetwork=NetworkProvider.shared.makeAppStartNetwork()
    appStartNetwork.fetchApp().subscribe(onNext: { [weak self] apiResult in
        switch apiResult{
        case let .success(response):
            //some codes
            self?.isLoading.onNext(false)
            self?.isSuccess.onNext(true)
            break
        case let .failure(errorContent):
            break
        }
        },onError:{ err in
            self.isLoading.onNext(false)
            self.isSuccess.onNext(false)
    }).disposed(by: bag)
}   }

这里有两个问题,都是由相同的编程错误造成的,即对处置袋生命周期的错误管理

通过在
getAppStart
的范围内创建dispose bag,您将其生命周期限定为函数的生命周期。这意味着当功能完成时,dispose bag将处理其附加的订阅

disposeBag
splashVm
的创建移动到视图控制器的作用域(函数之外),应该可以解决您的问题

let splashVm=SplashViewModel()
let disposeBag = DisposeBag()

func getAppStart(){
    splashVm.isSuccess.subscribe(onNext: { (ok) in
        if(ok){
            print("splash success")
            self.navigateMain()
        }else{
            self.showAlert("splash fail")
        }

    },onError:{ err in
        self.showAlert(err.localizedDescription)
    }).disposed(by: disposeBag)
    splashVm.fetchAppStart()
 }
let splashVm=SplashViewModel()
let disposeBag = DisposeBag()

func getAppStart(){
    splashVm.isSuccess.subscribe(onNext: { (ok) in
        if(ok){
            print("splash success")
            self.navigateMain()
        }else{
            self.showAlert("splash fail")
        }

    },onError:{ err in
        self.showAlert(err.localizedDescription)
    }).disposed(by: disposeBag)
    splashVm.fetchAppStart()
 }