Создание реактивного расширения для Alamofire и Argo
Привет у меня есть проблема с моим реактивным расширением для Alamofire
Вот:
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()})
}
}
}
Я получаю эту ошибку:
Ни один из кандидатов 'декодирования' не приводит к ожидаемому типу контекстного результата 'T?
1 ответ
Это вызвано общим 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> {