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

Posted

技术标签:

【中文标题】RxSwift/Moya - 如果通过函数返回序列将不会启动【英文标题】:RxSwift/Moya - Sequence won't start if it is returned via function 【发布时间】:2017-11-07 19:50:39 【问题描述】:

我尝试通过 Moya 发起网络请求。

    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】:

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

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

【讨论】:

以上是关于RxSwift/Moya - 如果通过函数返回序列将不会启动的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift + Moya + ObjectMapper

RxSwift + Moya + ObjectMapper

给定程序MODI1.C中函数 fun 的功能是:求出以下分数序列的前n项之和。和值通过函数值返回到main函数。

写一个函数返回参数二进制中1的个数

map,filter

Python 序列操作符与函数