在我的情况下,SignalProducer 没有使用 ReactiveSwift 启动



假设我想从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 { 事件在 案例让 .value(值): 打印(值) 案例让 .failed(错误): 打印(错误) } 更重要的是,如果我想执行另一个网络请求,我该怎么办?

任何帮助,不胜感激。

正如评论中所讨论的,provider需要保持活动状态才能使SignalProduce正常工作。为了避免将provider存储在某个实例 var 中,您可以按照 Matt Gallagher 在这篇 Cocoa with Love 帖子中的建议去做,即将withExtendedLifetime(provider) {}放在您的flatMap闭包中的某个地方,以便只要您的生产者还活着,provider就活着。这基本上只是一种保留provider的方法,而不会让编译器抱怨未使用的变量。

相关内容

  • 没有找到相关文章

最新更新