【问题标题】:Hierarchies Level extract data till the end of LevelsHierarchies Level 提取数据直到 Levels 结束
【发布时间】: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


【解决方案1】:

为您的 json 使用链接轻松创建模型(类/结构):- https://app.quicktype.io/

并使用json解码器进行解码

let decoder = JSONDecoder()
let loadedData = try? decoder.decode(struc.self, from: jsonData)

-> 你的模型

struct Welcome: Codable {
    var result: [Result]?
}

// MARK: - Result
struct Result: Codable {
    var name: String?
    var hierarchies: [Hierarchy]?
}

// MARK: - Hierarchy
struct Hierarchy: Codable {
    var hierarchyOrder, hierarchyLevel: Int?
    var name: String?
    var hierarchies: [Hierarchy]?
    var isEnabled: Bool?

    enum CodingKeys: String, CodingKey {
        case hierarchyOrder = "hierarchy_order"
        case hierarchyLevel = "hierarchy_level"
        case name, hierarchies
        case isEnabled = "is_enabled"
    }
}

-> 现在你可以像这样轻松使用它了

let myStrut = Welcome()
myStruct.result[Index].hierarchies[Index].name

【讨论】:

  • 问题是在枚举中迭代到 [hierarchies] 数组的末尾,我可以显示元素名称但无法到达循环的末尾
  • 旁注:CodingKeys 可以通过使用 decoder 上的设置来省略蛇形转骆驼。
  • 你能分享你的数据吗..我可以为你在表格视图中设置它
  • @Larme 那么你应该拥有蛇盒中的每一个钥匙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
相关资源
最近更新 更多