[英]Swift 4.2 : Type 'T' does not conform to protocol 'Decodable'
我有一个函数,该函数调用URL以JSON形式接收数据。 要将JSON解码为自定义类,请使用JSONDecoder。
fileprivate func loadFlux<T>(_ typeClass: T.Type, urlCriteria url: String) -> Promise<Any> {
var dataFlux: [T]? = nil
var promise: Promise<Any>? = nil
...
let jsonData: Data = try! JSONSerialization.data(withJSONObject: data as! NSArray)
let decoder = JSONDecoder()
dataFlux = try decoder.decode([T], from: data)
...
}
在安装最新版本的Xcode和swift 4.2之前,代码构建没有任何问题。
但是现在我Type 'T' does not conform to protocol 'Decodable'
以下错误消息: Type 'T' does not conform to protocol 'Decodable'
:
dataFlux = try decoder.decode([T], from: data)
我试图搜索该消息,但目前未成功。 有解决这个问题的建议吗?
该代码甚至无法在以前的Swift版本上进行编译,因为JSONDecoder.decode
期望其输入参数符合Decodable
并且您没有设置类型约束。 您只需要将T
限制为Decodable
。
fileprivate func loadFlux<T:Decodable>(_ typeClass: T.Type, urlCriteria url: String) -> Promise<Any> {
var dataFlux: [T]? = nil
var promise: Promise<Any>? = nil
...
let jsonData: Data = try! JSONSerialization.data(withJSONObject: data as! NSArray)
let decoder = JSONDecoder()
dataFlux = try decoder.decode([T].self, from: jsonData)
...
}
没有完整的上下文,我无法确定您要从函数中返回什么,但是从泛型函数返回Promise<Any>
绝对是个坏主意。 您应该使函数的返回类型也通用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.