类型不能符合 Decodable 但实际上是

olv*_*rwn 2 swift swift-protocols codable decodable

我有一个名为 ObjectAPIModel 的类型,它明确符合 Codable 协议。我还有一个函数,它接收一些数据并调用另一个函数将任何 JSON 解码为指定类型。但是如果我调用decodeJSON(),它会显示一个错误,指出ObjectAPIModel 不符合Decodable。有人可以帮忙吗?

struct ObjectAPIModel: Codable {
    
    let objectID: Int
    var primaryImage: String
    var title: String
    var department: String
}
Run Code Online (Sandbox Code Playgroud)
func decodeJSON<T: Decodable>(data: Data, ofType: T) -> Result<T, APIError> {
        
    let decodedObject = try? JSONDecoder().decode(T.self, from: data)
    if decodedObject == nil {
        return .failure(APIError.emptyResponse)
    } else {
        return .success(decodedObject!)
    }
}
Run Code Online (Sandbox Code Playgroud)
let result = decodeJSON(data: unwrappedData, ofType: ObjectAPIModel)
Run Code Online (Sandbox Code Playgroud)

我收到错误:“类型‘ObjectAPIModel.Type’不能符合‘Decodable’”

Jer*_*myP 5

在下面的行中

func decodeJSON<T: Decodable>(data: Data, ofType: T) -> Result<T, APIError>
Run Code Online (Sandbox Code Playgroud)

该参数ofType被声明为 的实例T并且您正在尝试传递类型元对象。更改声明如下:

func decodeJSON<T: Decodable>(data: Data, ofType: T.Type) -> Result<T, APIError>
//                                                  ^^^^
Run Code Online (Sandbox Code Playgroud)

另外,当你调用时,decodeJSON你不能使用裸类型名称,你必须输入ObjectAPIModel.selfie

let result = decodeJSON(data: unwrappedData, ofType: ObjectAPIModel.self)
//                                                                  ^^^^
Run Code Online (Sandbox Code Playgroud)

  • @olvrwn 哦,是的,忘记了这个问题。我会将其添加到答案中。 (2认同)