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

标签 swift reactive-programming rx-swift moya

我尝试通过 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)

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

最佳答案

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

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

关于swift - RxSwift/Moya - 如果通过函数返回序列将不会启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47166312/

相关文章:

ios - 对多个项目使用单个 xcode 文件

swift - 如何启动外部进程?

ios - 如何测试 RxSwift 变量和 RxCocoa Observable 之间的 UI 绑定(bind)?

ios - subscribeNext 和 bindNext 的区别

swift - 如何在 RxSwift 中将多个数据模型绑定(bind)到 TableView

swift - 旋转带有纹理的 SKShapeNode

swift - XML 解析器异步操作

ios - ReactiveCocoa - 停止命令

java - 使用 RxJava 2 异步读取文件

rx-java - Rxjava中的“背压”一词是什么意思?