代码之家  ›  专栏  ›  技术社区  ›  Ben W

RxSwift/Moya-如果通过函数返回,则序列不会启动

  •  0
  • Ben W  · 技术社区  · 7 年前

        let provider = MoyaProvider<User>()
    
        provider.rx.request(.Auth(username: username, password: password))
            .filterSuccessfulStatusAndRedirectCodes()
            .debug()
            .mapOptional(to: Authentication.self)
            .observeOn(MainScheduler.instance)
            .subscribe {
                event in
                print(event)
            }.disposed(by: disposeBag)
    

    当我用上面的方法做的时候,一切都很好。

    但如果我这样做:

    func logIn(username: username, password: password) -> Single<Authentication?> {
    
        let provider = MoyaProvider<User>()
    
        return provider.rx.request(.Auth(username: username, password: password))
            .filterSuccessfulStatusAndRedirectCodes()
            .debug()
            .mapOptional(to: Authentication.self) 
    }
    

    然后调用函数:

    self.loginIn(username: username, password: password)
            .observeOn(MainScheduler.instance)
            .subscribe {
                event in
                print(event)
            }
            .disposed(by: disposeBag)
    

    调试输出表明它已订阅,但如果我通过函数返回它,它将不会启动序列。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Ben W    7 年前

    我已经解决了这个错误。您需要保留提供商。将其存储在实例变量中,并且不会被释放。

    https://github.com/Moya/Moya/issues/1460