主要是我的用例是使用字典创建对象:例如
struct Person: Codable { let name: String }
let dictionary = ["name": "Bob"]
let person = Person(from: dictionary)
Run Code Online (Sandbox Code Playgroud)
我想避免编写自定义实现,并希望尽可能高效.
Chr*_*ore 24
目前,我所拥有的最佳解决方案是此,但它具有编码/解码的开销.
extension Decodable {
init(from: Any) throws {
let data = try JSONSerialization.data(withJSONObject: from, options: .prettyPrinted)
let decoder = JSONDecoder()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:sszzz"
decoder.dateDecodingStrategy = .formatted(dateFormatter)
self = try decoder.decode(Self.self, from: data)
}
}
Run Code Online (Sandbox Code Playgroud)
根据问题中的例子,结果将是
let person = Person(from: dictionary)
Run Code Online (Sandbox Code Playgroud)
如果您对以其他方式感兴趣,那么这可能有助于/sf/answers/3243033881/