2015-11-17 10 views
7

मुझे ReactiveCocoa में मेरे पुराने Alamofire 2.0 से 3.0 में कनवर्ट करने में बहुत परेशानी हो रही है। मैं अपने sendNext और sendCompleted कॉल पर अज्ञात पहचानकर्ता त्रुटि प्राप्त करता रहता हूं।अलामोफायर 3.0 प्रतिक्रियाशील कोको रूपांतरण

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

उत्तर

11

इस वाक्य रचना changed in 4.0 alpha 2 के लिए observer.sendNext(value) और डिट्टो की कोशिश करो। 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) 
} 
संबंधित मुद्दे