swift – Alamofire 3.0 ReactiveCocoa转换

前端之家收集整理的这篇文章主要介绍了swift – Alamofire 3.0 ReactiveCocoa转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Reactive Cocoa中将旧的Alamofire 2.0转换为3.0时遇到了很多麻烦.我在sendNext和sendCompleted调用中不断收到未知标识符错误.
  1. public final class Network: Networking {
  2. private let queue = dispatch_queue_create( "Beet.BeetModel.Network.Queue",DISPATCH_QUEUE_SERIAL)
  3.  
  4. public init() { }
  5.  
  6. public func requestJSON(url: String,parameters: [String : AnyObject]?)
  7. -> SignalProducer<AnyObject,NetworkError>
  8. {
  9. return SignalProducer { observer,disposable in
  10. let serializer = Alamofire.Request.JSONResponseSerializer()
  11. Alamofire.request(.GET,url,parameters: parameters)
  12. .response(queue: self.queue,responseSerializer: serializer) {
  13. _,_,result in
  14. switch result {
  15. case .Success(let value):
  16. sendNext(observer,value)
  17. sendCompleted(observer)
  18. case .Failure(_,let error):
  19. sendError(observer,NetworkError(error: error))
  20. }
  21. }
  22. }
  23. }
  24. }
这个语法 changed in 4.0 alpha 2. Observer现在是它自己的类型,所以旧函数sendNext,sendError等不再是自由函数
  1. switch result {
  2. case .Success(let value):
  3. observer.sendNext(value)
  4. observer.sendCompleted()
  5. case .Failure(_,let error):
  6. observer.sendError(NetworkError(error: error))
  7. }

我要为您的解决方添加的一件事是提供一次性使用,以便在需要时可以取消请求,以节省资源:

  1. return SignalProducer { observer,disposable in
  2. let serializer = Alamofire.Request.JSONResponseSerializer()
  3. let request = Alamofire.request(.GET,parameters: parameters)
  4.  
  5. request.response(queue: self.queue,responseSerializer: serializer) { _,result in
  6. switch result {
  7. case .Success(let value):
  8. observer.sendNext(value)
  9. observer.sendCompleted()
  10. case .Failure(_,let error):
  11. observer.sendError(NetworkError(error: error))
  12. }
  13. }
  14.  
  15. disposable.addDisposable(request.cancel)
  16. }

猜你在找的Swift相关文章