Предположим, я хочу прочитать значение из UseDefaults, если оно не работает, попробуйте запросить его у сервера, я написал этот код, но он не будет выполняться:
func getAuthorizationCode() -> SignalProducer<String, MoyaError> {
if let authCode = UserDefaults.string(forKey: .authorizationCode) {
return SignalProducer(value: authCode)
}
let provider = ReactiveSwiftMoyaProvider<UserService>()
return provider.request(.authorization).flatMap(.concat) {
response -> SignalProducer<String, Moya.MoyaError> in
let json = JSON(data: response.data)
log.debug("Authorization response:\(json) ")
let authCode = json["authorizationcode"].stringValue
return SignalProducer(value: authCode)
}
}
getAuthorizationCode().start { событие в случае let .value(value): print(value) case let .failed(error): print(error) } Более того, если я хочу выполнить другой сетевой запрос, что мне делать? делать?
Любая помощь приветствуется.
ReactiveSwiftMoyaProvider<UserService>
, чтобы убедиться, что он работает? - person jjoelson   schedule 04.05.2017provider
был уничтожен после вызова функции. так что есть предложения, как увеличить срок службыSignalProducer
? - person Alex Chan   schedule 05.05.2017ReactiveSwiftMoyaProvider
? Что касается управления памятью, я думаю, что производитель, возвращенный изgetAuthorizationCode()
, должен сохранить производителя изprovider.request(.authorization)
черезflatMap
. Поэтому я думаю, чтоprovider
должен каким-то образом избавляться от производителя при деинициализации. - person jjoelson   schedule 05.05.2017provider.request(.authorization)
, слабо ссылается на поставщика, поэтому он может использовать его для запуска запроса. Я думаю, вам просто нужно держать провайдера в собственности. Если вы хотите поумничать, чтобы избежать использования сохраненного свойства, возможно, вы можете захватить его в этом закрытииflatMap
, чтобы поддерживать его в рабочем состоянии, пока жив ваш SignalProducer. - person jjoelson   schedule 05.05.2017