2015-11-17 20 views
7

Sto riscontrando notevoli problemi nel convertire il mio vecchio Alamofire 2.0 in 3.0 in ReactiveCocoa. Continuo a ricevere un errore di identificatore sconosciuto sulle mie chiamate sendNext e sendCompleted.Conversione Alamofire 3.0 ReactiveCocoa

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)) 
       } 
     } 
    } 
} 
} 

risposta

2

Prova observer.sendNext(value) e idem per sendCompleted e sendError

11

Questa sintassi changed in 4.0 alpha 2. Observer è ora un proprio tipo in modo che le vecchie funzioni sendNext, sendError, ecc non sono più funzioni libere:

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

Una cosa che vorrei aggiungere alla vostra soluzione è quella di fornire un usa e getta in modo che le richieste possono essere cancellate in caso di necessità, per risparmiare risorse:

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) 
}