Для этой цели лучше использовать 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
}
}
В этом примере каждый раз, когда вы нажимаете клавишу load, увеличивается диапазон свойств 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()
}
}
}
}
Имейте в виду, что диспетчеризация необходима, потому что без нее у вас будет ошибка «Обновление табличного представления, пока табличное представлениеобновление). Возможно, вы можете использовать другой асинхронный способ для обновления данных