我的应用程序具有本地缓存,并从/向服务器发送/接收模型.所以我决定构建一个map [String:Codable.Type],基本上能够解码我在本地创建或从服务器接收的通用缓存上的任何内容.
let encoder = JSONEncoder()
let decoder = JSONDecoder()
var modelNameToType = [String : Codable.Type]()
modelNameToType = ["ContactModel": ContactModel.Self, "AnythingModel" : AnythingModel.Self, ...]
Run Code Online (Sandbox Code Playgroud)
无论我在App上创建什么,我都可以成功编码并存储在缓存中,如下所示:
let contact = ContactModel(name: "John")
let data = try! encoder.encode(contact)
CRUD.shared.storekey(key: "ContactModel$10", contact)
Run Code Online (Sandbox Code Playgroud)
我想像这样解码:
let result = try! decoder.decode(modelNameToType["ContactModel"]!, from: data)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
无法使用类型的参数列表(Codable.Type,from:Data)调用'decode'
我究竟做错了什么?任何帮助表示赞赏
修复类型有效,并解决任何本地请求,但不能解决远程请求.
let result = try! decoder.decode(ContactModel.self, from: data)
Run Code Online (Sandbox Code Playgroud)
联系型号:
struct ContactModel: Codable {
var name : String
}
Run Code Online (Sandbox Code Playgroud)
对于远程请求,我会有这样的函数:
func buildAnswer(keys: [String]) -> Data {
var result = [String:Codable]()
for key …Run Code Online (Sandbox Code Playgroud)