swift - 如何创建解码器的实例?
问题描述
我想初始化来自另一个模块的结构。它没有公共init()
方法,但我可以通过解码 JSON 来创建它。
struct Foo: Codable {
let name: String
let details: String
}
我创建了一个静态函数来创建一个实例
extension Foo {
static func create(name: String) throws -> Self {
let dictionaryRep = ["name": name, "details": ""]
let data = try JSONSerialization.data(withJSONObject: dictionaryRep, options: [])
return try JSONDecoder().decode(Self.self, from: data)
}
}
有没有办法创建一个新的 init 方法来创建一个新实例?
extension {
public init(name: String) throws {
try self.init(from: <#Decoder#>)
}
}
解决方案
因为Foo
是 a struct
(不是 a class
),所以您的初始化程序可以self
像这样分配:
extension Foo {
init(name: String) throws {
let data = try JSONSerialization.data(withJSONObject: ["name": name, "details": ""])
self = try JSONDecoder().decode(Self.self, from: data)
}
}
推荐阅读
- python - 在 Google 表格中创建空数据框
- passport.js - 在 IOS 中从 Facebook 应用程序使用 Passportjs Facebook 时会话过期
- python-3.x - 将多个时间序列从单个列中分离出来以分离每个系列的列?
- java - 我可以为通用函数提供正确的类型信息吗?
- python - 对于长期运行的 Python API 端点,什么是可行的 Azure 主机?
- uwp - 无法在画布上设置鼠标光标
- prolog - findall 的异常行为
- cobol - COBOL 如何实际接受数值?
- javascript - 键入时自动更改焦点
- datetime - jmeter将人类可读的日期转换为纪元