我有一个结构如下的 JSON 响应:
{
"id": {
"sub_key1": "sub_value1",
"sub_key2": "sub_value2",
"sub_key3": "sub_value3",
"used": false
},
"key1": {
"sub_key1": "sub_value1",
"sub_key2": "sub_value2",
"sub_key3": "sub_value3",
"used": true
},
"key2": {
"sub_key1": "sub_value1",
"sub_key2": "sub_value2",
"sub_key3": "sub_value3",
"used": false
},
"key3": {
"sub_key1": "sub_value1",
"sub_key2": "sub_value2",
"sub_key3": "sub_value3",
"used": true
},
"key4": {
"sub_key1": "sub_value1",
"sub_key2": "sub_value2",
"sub_key3": "sub_value3",
"used": false
},
"key5": {
"sub_key1": "sub_value1",
"sub_key2": "sub_value2",
"sub_key3": "sub_value3",
"used": true
}
}
我已经为它创建了 Swift 父子结构,如下所示:
家长:
struct Parent: Codable {
let id: Child?
let key1: Child?
let key2: Child?
let key3: Child?
let key4: Child?
let key5: Child?
}
child :
struct Child: Codable {
let sub_key1: String?
let sub_key2: String?
let sub_key3: String?
let used: Bool?
}
现在,只有部分 Child 对象被使用,具体取决于“已使用”属性,我想过滤掉未使用的 Child 对象。我考虑过使用 map方法,但这只适用于数组。
关于如何解决这个问题有什么想法吗?
最佳答案
我会像这样存储 Parent
:
struct Parent {
let children: [String: Child]
}
这将允许您使用 parent.children.values.filter
过滤子项并为键添加一些动态。
作为旁注:
Swift 4.2 将允许您进行动态调用。这意味着您可以实现:
extension Parent {
subscript(dynamicMember member: String) -> Child? {
get {
return children[member]
}
set {
children[member] = newValue
}
}
}
这将允许您仍然调用 parent.key1
或 parent.id
而不会失去可读性。
关于json - 遍历自定义对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52259908/