gpt4 book ai didi

swift - 为 Alamofire 和 Argo 创建响应式扩展

转载 作者:行者123 更新时间:2023-11-30 13:20:27 24 4
gpt4 key购买 nike

您好,我的 Alamofire 响应式(Reactive)扩展遇到问题

这里是:

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?'

最佳答案

这是由于通用 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> {

关于swift - 为 Alamofire 和 Argo 创建响应式扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com