我有一个非常简单的视图,在视图中我运行了一个包含一些文本的循环。我只想在视图模型数据发生变化时重新加载循环中的内容。
视图
import SwiftUI
struct DateTimeSelectionView: View {
@ObservedObject private var dateTimeSelectionModel = DateTimeSelectionViewModel()
var body: some View {
VStack {
Button {
self.dateTimeSelectionModel.updateRecord()
dateTimeSelectionModel.objectWillChange.send()
} label: {
Text("Update Record")
}
ForEach(0..<(dateTimeSelectionModel.data.count)) { index in
VStack {
Text("Hello \(index)")
}
}
}
}
}
struct DateTimeSelectionView_Previews: PreviewProvider {
static var previews: some View {
DateTimeSelectionView()
}
}
视图模型:
import Foundation
class DateTimeSelectionViewModel: ObservableObject {
@Published var data:[Int] = Array(0...10)
func updateRecord() {
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
self.data.append(12)
self.data.append(13)
self.data.append(14)
})
}
}
1条答案
按热度按时间mutmk8jj1#
使用
StateObject
和enumerated()
尝试此方法:您还可以用途:
注意,不建议使用此选项:
请注意这与
item
之间的区别,即数组的内容:这与
index
,数组元素的索引: