为此目的最好使用 ForEach 和 List
struct ContentView : View {
@State var textfieldText: String = "String "
private let chunkSize = 10
@State var range: Range<Int> = 0..<1
var body: some View {
List {
ForEach(range) { number in
Text("\(self.textfieldText) \(number)")
}
Button(action: loadMore) {
Text("Load more")
}
}
}
func loadMore() {
print("Load more...")
self.range = 0..<self.range.upperBound + self.chunkSize
}
}
在此示例中,每次按下加载更多时,它都会增加 State 属性的范围。您可以对 BindableObject 执行相同的操作。如果您想自动执行此操作,您可能应该阅读 PullDownButton(我不确定它是否适用于 PullUp)
UPD:
作为一个选项,您可以通过在最后一个单元格上使用 onAppear 修饰符来下载新项目(在此示例中它是一个静态按钮)
var body: some View {
List {
ForEach(range) { number in
Text("\(self.textfieldText) \(number)")
}
Button(action: loadMore) {
Text("")
}
.onAppear {
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime(uptimeNanoseconds: 10)) {
self.loadMore()
}
}
}
}
请记住,调度是必要的,因为没有它,您将收到一条错误消息“在更新表格视图时更新表格视图)。您可能会使用另一种异步方式来更新数据