gpt4 book ai didi

swift - 如何扩展 Decodable 以从字典初始化?

转载 作者:行者123 更新时间:2023-11-28 11:37:05 25 4
gpt4 key购买 nike

我想扩展 Decodable,这样我就可以从值字典中创建 Codable 类的新实例。

extension Decodable {
init(from dictionary: [String : Codable]) throws {
let data = try JSONSerialization.data(withJSONObject: dictionary, options: [])
let newSelf = try JSONDecoder().decode(self.type, from: data)

self = newSelf
}
}

我在以 let newSelf = ... 开头的行中收到错误 Value of type 'Self' has no member 'type' >

我应该如何提供要在此处使用的类型?

最佳答案

self.type 必须是具体类型,而不是协议(protocol)。而且您无论如何都无法创建 Decodable 的实例。

你可以做的是创建一个通用的 decode 方法,例如将字典作为参数

func decode<T : Decodable>(from dictionary: [String : Decodable]) throws -> T {
let data = try JSONSerialization.data(withJSONObject: dictionary)
return try JSONDecoder().decode(T.self, from: data)
}


struct Person : Decodable {
let name : String
let age : Int
}

let dict : [String:Decodable] = ["name" : "Foo", "age" : 30]

let person : Person = try! decode(from: dict)

关于swift - 如何扩展 Decodable 以从字典初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829699/

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