Swift:如何传递一个可编码类型作为函数输入来编码或解码json



我想制作一个助手函数,它接受可编码/可解码类型的输入,以便对json进行编码或解码。我试过

static func loadCache<T:Decodable>(fileName:String, type:T)throws->T{
let data = try FileManager.loadCache(fileName: fileName)
return try JSONDecoder().decode(T.self, from: data)
}

使用功能

let products = try loadCache(fileName: Product.cacheFileName(), type: [Product])

我收到错误Type '[Product].Type' cannot conform to 'Decodable'

将此传递给函数的正确方法是什么感谢

你非常接近。你的语法有点不正确。您希望将类型作为值传递,而不是作为类型的值传递,因此这是您需要的签名:

static func loadCache<T:Decodable>(fileName:String, type: T.Type) throws -> T{
^^^^^

Swift要求您非常明确地将类型作为值进行传递。需要添加.self:

let products = try loadCache(fileName: Product.cacheFileName(),
type: [Product].self)
^^^^^

最新更新