2015-11-17 25 views
7

Mam problem z konwersją mojego starego Alamofire 2.0 na 3.0 w ReactiveCocoa. Wciąż otrzymuję komunikat o nieznanym identyfikatorze podczas połączeń sendNext i sendCompleted.Alamofire 3.0 ReactiveCocoa Konwersja

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

Odpowiedz

2

Spróbuj observer.sendNext(value) i Ditto dla sendCompleted i sendError

11

tej składni changed in 4.0 alpha 2. Observer jest teraz swój własny typ tak dawne funkcje sendNext, sendError itp nie są już darmowe funkcje:

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

Jedno Dodałbym do rozwiązania jest dostarczenie jednorazowe tak, że wnioski mogą być odwołane, jeżeli to konieczne, aby zaoszczędzić zasoby:

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