Swift:如何将可编码类型作为函数输入传递给编码或解码 json
Swift: How to pass a codable type as a function input to encode or decode json
我想制作一个辅助函数,它接受 encodable/decodable 类型的输入以编码或解码 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)
^^^^^
我想制作一个辅助函数,它接受 encodable/decodable 类型的输入以编码或解码 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)
^^^^^