swift - 使用 CodingKeys 访问结构变量的值
问题描述
我正在为我的结构创建一个自定义 JSON 解码方法,我需要遍历它的所有参数。我考虑过使用CodingKeys
但我不知道如何实现它(或者即使它是可行的)。
这是我要减少的代码:
struct Root: Codable {
let objectA: ObjectA?
let objectB: ObjectB?
enum CodingKeys: String, CodingKey {
case objectA
case objectB
}
init(from decoder: Decoder) throws {
objectA = decodeOrSkip(using: decoder, key: .objectA)
objectB = decodeOrSkip(using: decoder, key: .objectB)
// ...
}
private func decodeOrSkip<T: Codable>(using decoder: Decoder, key: CodingKeys) -> T? {
guard let container = try? decoder.container(keyedBy: CodingKeys.self) else { return nil }
if let decoded = try? container.decode(T.self, forKey: key) {
return decoded
} else {
log.warning("Unable to decode \(T.self) from \(String(describing: self))")
return nil
}
}
}
struct ObjectA: Codable { /*...*/ }
struct ObjectB: Codable { /*...*/ }
如果我可以使用 CodingKeys 访问 struct 的变量的值,我可以遍历我的CodingKeys
(通过使其符合CaseIterable
)并应用decodeOrSkip
它们中的每一个
在我的研究中,我发现了这篇文章:来自 String 的 Swift Keypath指出:
最后我发现我应该使用 CodingKeys 而不是 KeyPaths 来通过 String 访问结构的变量的值
但是没有显示如何实现它的代码。
解决方案
推荐阅读
- node.js - Joi 根据多个键验证替代方案
- python - 如何解决 Azure CosmosDB 上仅出现在大数据集合上的查询问题?
- c - C中的可变大小数组和数组指针
- javascript - 邮递员捕获匹配另一个元素标准的元素
- regex - 正则表达式仅验证捕获组的结果
- javascript - 像这样调用javascript函数是什么意思 func(foo)(bar)
- android - Xamarin.Forms Android 在 VS 2019 上启动时崩溃
- excel - 在匹配的行上只合并一列
- python - Tensorflow,迭代张量
- google-apps-script - Getting the number equalent of duration using GAS