这个SwiftUI列表上有什么问题,没有显示正确的数据

cld4siwp  于 2023-09-30  发布在  Swift
关注(0)|答案(1)|浏览(92)

为了学习,我正在解析一个网站上的HTML数据。我收集这些数据并添加到类DataManager中的一个名为“arrayDuty”的数组中:ObservableObject

var arrayDuty : [Duty] = []
    {
        didSet {
            objectWillChange.send() 
        }
    }

使用调试工具,我可以看到我的数组中的数据(在这个例子中是3个值):

在我的内容视图中,我尝试显示一个列表,其中包含数组中每个值的数据,

struct ContentView: View {
    @ObservedObject var dm : DataManager
    
    var body: some View {
        VStack {
            
            List(dm.arrayDuty){ item in
                Text(item.dutyDay)
            }
            
            Button(action: {
                dm.loadRoster()
            }, label: {
                Text("parse Table Roster")
            })
            
            Button {
                prt(array: dm.arrayDuty)
            } label: {
                Text("show")
            }

        }
    }
    func prt(array: [Duty]) {
        for item in array {
            print(item.dutyDay)
        }
    }
}

当我按下加载名册按钮时,数组中正确填充了数据,列表自动更新,但显示错误的数据。我不知道为什么我的列表总是显示相同的第一个值,而不是数组中的每个值。

jfgube3f

jfgube3f1#

在你的Dm中为arrayDuty使用@Published属性,并使你的Duty模型符合Hashable协议:

@Published var arrayDuty = [Duty]()

在ContentView中为Dm创建一个@StateObject:

@StateObject var dm = Dm()

内容视图设置:

List(dm.arrayDuty, id: \.self) { item in
    Text(item.dutyDay)
}

相关问题