2015-11-17 14 views
7

Ich habe eine Menge Probleme beim Umwandeln meiner alten Alamofire 2.0 in 3.0 in ReactiveCocoa. Ich bekomme immer einen unbekannten Identifikator Fehler auf meinen sendNext und sendCompleted Anrufe.Alamofire 3.0 ReactiveCocoa Umwandlung

public final class Network: Networking { 
private let queue = dispatch_queue_create("Beet.BeetModel.Network.Queue", DISPATCH_QUEUE_SERIAL) 

public init() { } 

public func requestJSON(url: String, parameters: [String : AnyObject]?) 
    -> SignalProducer<AnyObject, NetworkError> 
{ 
    return SignalProducer { observer, disposable in 
     let serializer = Alamofire.Request.JSONResponseSerializer() 
     Alamofire.request(.GET, url, parameters: parameters) 
      .response(queue: self.queue, responseSerializer: serializer) { 
       _, _, result in 
       switch result { 
       case .Success(let value): 
        sendNext(observer, value) 
        sendCompleted(observer) 
       case .Failure(_, let error): 
        sendError(observer, NetworkError(error: error)) 
       } 
     } 
    } 
} 
} 

Antwort

2

Versuchen observer.sendNext(value) und dito für sendCompleted und sendError

11

Diese Syntax changed in 4.0 alpha 2. Observer ist jetzt seine eigene Art, so dass die alten Funktionen sendNext, sendError, etc. sind nicht mehr frei Funktionen:

switch result { 
case .Success(let value): 
    observer.sendNext(value) 
    observer.sendCompleted() 
case .Failure(_, let error): 
    observer.sendError(NetworkError(error: error)) 
} 

Eine Sache, die ich zu Ihrer Lösung hinzufügen würde, ist eine Einweg zu schaffen, so dass Anfragen abgebrochen werden können, wenn nötig, Ressourcen sparen:

return SignalProducer { observer, disposable in 
    let serializer = Alamofire.Request.JSONResponseSerializer() 
    let request = Alamofire.request(.GET, url, parameters: parameters) 

    request.response(queue: self.queue, responseSerializer: serializer) { _, _, result in 
     switch result { 
     case .Success(let value): 
      observer.sendNext(value) 
      observer.sendCompleted() 
     case .Failure(_, let error): 
      observer.sendError(NetworkError(error: error)) 
     } 
    } 

    disposable.addDisposable(request.cancel) 
}