tableview扩展与JSON数据的崩溃问题

问题描述

我正在创建Swift应用,并在内部应用中实现UITableView折叠/扩展功能,并且在tableview中设置静态数据并成功显示,但在尝试加载{{1}时}比我面临的问题要多的是我的代码模型结构

这是解析JSON

的模型
JSON

这是我用静态数据填充tableview的方式

public struct Item {
    var service: String
    var service_price: Int
    var barber_service_id: Int
    var service_duration: Int
    
    public init(service: String,service_price: Int,barber_service_id: Int,service_duration: Int) {
        self.service = service
        self.service_price = service_price
        self.barber_service_id = barber_service_id
        self.service_duration = service_duration
    }
}
public struct Section1 {
    var name: String
    var items: [Item]
    var collapsed: Bool
    
    public init(name: String,items: [Item],collapsed: Bool = false) {
        self.name = name
        self.items = items
        self.collapsed = collapsed
    }
}

您可以在静态代码中看到,我在public var sectionsData: [Section1] = [ Section1(name: "Beard",items: [Item(service: "Beard Trim",service_price: 1,barber_service_id: 1,service_duration: 30),Item(service: "Beard Line Up",service_duration: 30)],collapsed: true) ] 数组中添加了两个项目,现在这是我尝试使用Item数据实现的代码

JSON

您可以在我的代码中看到,我为每个循环获取service.array?.forEach({ (sList) in let item = Item(service: sList["service"].stringValue,service_price: sList["service_price"].intValue,barber_service_id: sList["barber_service_id"].intValue,service_duration: sList["service_duration"].intValue) let sections = Section1(name: category_name,items: [item],collapsed: true) self.sections.append(sections) }) 数据,但是现在像在静态代码中一样,我可以添加多个项目,以便在动态数据中执行该操作

有人可以帮我吗

解决方法

创建一个实例var来保存您的数据源。

var sectionsData: [Section1] = []

通过API响应创建部分

guard let array = service.array else {
    return
}

let newSections: [Section1] = array.map { (sList) in
    let item = Item(service: sList["service"].stringValue,service_price: sList["service_price"].intValue,barber_service_id: sList["barber_service_id"].intValue,service_duration: sList["service_duration"].intValue)
    return Section1(name: category_name,items: [item],collapsed: true)
}

将此新数据添加到您的实例var

sectionsData.append(contentsOf: newSections)

重新加载表数据(在主线程上)