【发布时间】:2022-01-09 14:20:50
【问题描述】:
如何在层次结构层次中解析树格式
当前来自 API 调用的 ResponseData 它包含两个层次结构
{
"result" : [
{
"name": "HIERARCHIES LEVELS",
"hierarchies" : [
{
"hierarchy_order" : 1,
"hierarchy_level" : 1,
"name": "LEVEL ONE",
"hierarchies" : [
{
"hierarchy_order" : 1,
"hierarchy_level" : 2,
"name": "LEVEL TWO",
"hierarchies" : [
],
"is_enabled" : true
}
],
"is_enabled" : true
},
{
"hierarchy_order" : 1,
"hierarchy_level" : 1,
"name": "LEVEL ONE",
"hierarchies" : [
{
"hierarchy_order" : 1,
"name" : "LEVEL TWO",
"hierarchy_level" : 2,
"hierarchies" : [
],
"is_enabled" : true
},
{
"hierarchy_order" : 1,
"name" : "LEVEL TWO",
"hierarchy_level" : 2,
"hierarchies" : [
],
"is_enabled" : true
}
],
"is_enabled" : true
}
]
}
]
}
模型类
struct AssignedHierarchyLevelModel {
let result: [Result]?
init(_ json: JSON) {
result = json["result"].arrayValue.map { Result($0) }
}
struct Result {
let name: String?
let hierarchies: [Hierarchies]?
init(_ json: JSON) {
name = json["name"].stringValue
hierarchies = json["hierarchies"].arrayValue.map { Hierarchies($0) }
}
}
struct Hierarchies {
let hierarchyOrder: Int?
let hierarchyLevel: Int?
let name: String?
let hierarchies: [Hierarchies]?
let isEnabled: Bool?
init(_ json: JSON) {
hierarchyOrder = json["hierarchy_order"].intValue
hierarchyLevel = json["hierarchy_level"].intValue
name = json["name"].stringValue
hierarchies = json["hierarchies"].arrayValue.map { Hierarchies($0) }
isEnabled = json["is_enabled"].boolValue
}
}
struct Hierarchies {
let hierarchyOrder: Int?
let hierarchyLevel: Int?
let name: String?
let hierarchies: [Hierarchies]?
let isEnabled: Bool?
init(_ json: JSON) {
hierarchyOrder = json["hierarchy_order"].intValue
hierarchyLevel = json["hierarchy_level"].intValue
name = json["name"].stringValue
hierarchies = json["hierarchies"].arrayValue.map { Hierarchies($0) }
isEnabled = json["is_enabled"].boolValue
}
}
}
回复后
var assignedhierarchyResult = [AssignedHierarchyLevelModel.Result]()
func dataBindAccountSettingHierarchyLevel(){
hierarchyParentList.removeAll()
self.assignedhierarchyResult = self.assignedHierarchyLevelModel?.result ?? []
}
// TableView 数据源委托方法
func numberOfChild(assignedhierarchyChilds: [AssignedHierarchyLevelModel.Result]) -> Int {
var arrayCount = [AssignedHierarchyLevelModel.Result.Hierarchies]()
assignedhierarchyChilds.enumerated().forEach { (indexValue,element) in
arrayCount.append(contentsOf: assignedhierarchyChilds[indexValue].hierarchies ?? [])
if arrayCount[indexValue].hierarchies?.count ?? 0 > 0 {
arrayCount[indexValue].hierarchies?.enumerated().forEach({ (subIndex, subElement) in
arrayCount.append(contentsOf: arrayCount[indexValue].hierarchies?[subIndex].hierarchies ?? [])
})
}
}
return arrayCount.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.numberOfChild(assignedhierarchyChilds: assignedhierarchyResult)
}
func numberOfSections(in tableView: UITableView) -> Int {
return assignedhierarchyResult.count
}
尝试像 AccordionLevels 这样的表格视图的层次结构级别无法从响应日期包装我的数据集。在普通的 tableview 中,我在 tableview 列表中显示其显示的 Root-Parent 和 Child。无法获取孩子的子列表。
如何从 [Hierarchies] 的 subChild 中提取数据直到 [Hierarchies] 的 subElement 结束?
【问题讨论】:
-
我不明白你到底想要什么。部分是顶级层次结构,很好。一节是什么?它的子层次结构和大子层次结构?
-
@Larme Iterating parent -> children -> grand children -> grand grand childer -> 直到家庭级别结束,我想在这里做。
-
但是您想将它们显示为“child”的同一级别?
-
@Larme 显示将达到手风琴级别
-
至少我需要在控制台中获取数据集才能打印,然后我会将日期绑定到手风琴表格视图。
标签: ios swift tableview hierarchy hierarchical-data