2015-11-17 7 views
7

У меня много проблем с преобразованием моего старого Alamofire 2.0 в 3.0 в ReactiveCocoa. Я продолжаю получать неизвестную ошибку идентификатора на моих вызовах sendNext и sendCompleted.Alamofire 3.0 ReactiveCocoa Conversion

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

ответ

2

Попробуйте observer.sendNext(value) и повторы sendCompletedsendError и

11

Этот синтаксис changed in 4.0 alpha 2. Observer теперь его собственный тип, так что старые функции sendNext, sendError и т.д. больше не свободные функции:

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

Одна вещь, которую я хотел бы добавить к вашему решению является предоставление одноразовой, так что запросы могут быть отменены в случае необходимости, для экономии ресурсов:

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) 
} 
Смежные вопросы