RxSwift/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)

В выводе отладки указано, что он подписан, но он не запустит последовательность, если я верну ее через функцию.


person Ben W    schedule 07.11.2017    source источник


Ответы (1)


Я решил ошибку. Вам нужно сохранить провайдера. Сохраните его в переменной экземпляра, и он не будет удален.

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

person Ben W    schedule 14.11.2017