我不明白为什么Text
更新,但List
没有。
我有一个模型,@Published
它是一个日期数组。还有一种从日期生成文本的方法。
这是一个简化版本:
class DataModel: NSObject, ObservableObject {
@Published var selectedDates: [Date] = []
func summary() -> String {
var lines: [String] = []
for date in selectedDates.sorted().reversed() {
let l = "\(someOtherStuff) \(date.dateFormatted)"
lines.append(l)
}
return lines.joined(separator: "\n")
}
}
我在我的观点中展示了这段文字。这是一个简化版本:
struct DataView: View {
@ObservedObject var model: DataModel
var body: some View {
ScrollView {
Text(model.summary())
}
}
}
它有效:当用户从视图中的 UI 向 中添加日期时model.selectedDates
,摘要文本会正确更新。
现在我想用行列表替换文本。
我改变方法:
func summary() -> [String] {
var lines: [String] = []
for date in selectedDates.sorted().reversed() {
let l = "\(someOtherStuff) \(date.dateFormatted)"
lines.append(l)
}
return lines
}
并改变观点:
var body: some View {
ScrollView {
List {
ForEach(model.summary(), id: \.self) { line in
Text(line)
}
}
}
}
但这不起作用:列表中根本没有文本,当用户将日期添加到model.selectedDates
.
我究竟做错了什么?