2016-06-14 30 views
0

嗨反應延長我有問題,我的Alamofire創造Alamofire和Argo

這裏無功擴展名是:

extension Alamofire.Manager{ 

    func rac_jsonRequest<T : Decodable, G : ErrorType>(method: Alamofire.Method,_ URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL, headers: [String: String]? = nil) -> SignalProducer<T,G> { 

     SignalProducer<T,G> { sink, disposable in 
      let request = self.request(method, URLString, parameters: parameters, encoding: encoding, headers: headers).responseJSON { response in 
       if let JSON = response.result.value{ 
        if let decoded : T = decode(JSON){ //ERROR THIS 
         sink.sendNext(decoded) 
         sink.sendCompleted() 
        } 
       } 
      } 
      disposable.addDisposable({request.cancel()}) 
     } 
    } 
} 

我得到這個錯誤:

No 'decode' candidates produce the expected contextual result type 'T?'

回答

0

這是造成通用的T在關聯的類型上不夠完整/嚴格。您正在嘗試使用類型decode功能被指定,像這樣:

func decode<T: Decodable where T == T.DecodedType>(_ object: AnyObject) -> T? 

額外where條款是什麼您實現失蹤。改變它應該修復它:

func rac_jsonRequest<T : Decodable, G : ErrorType where T == T.DecodedType>(method: Alamofire.Method,_ URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL, headers: [String: String]? = nil) -> SignalProducer<T,G> {