gpt4 book ai didi

json - swift 4.2 : Type 'T' does not conform to protocol 'Decodable'

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:54 29 4
gpt4 key购买 nike

我有一个调用 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' on the line :

dataFlux = try decoder.decode([T], from: data)

我尝试用谷歌搜索该消息,但暂时没有成功。有什么解决该问题的建议吗?

最佳答案

即使在以前的 Swift 版本上,该代码也无法编译,因为 JSONDecoder.decode期望其输入参数符合 Decodable并且您没有设置类型约束。您只需要限制 TDecodable .

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>从通用函数中提取绝对不是一个好主意。您还应该使函数的返回类型也通用。

关于json - swift 4.2 : Type 'T' does not conform to protocol 'Decodable' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52595249/

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