Я сделал это, выяснив, является ли отображаемый объект последним элементом в списке, а затем вызвав функцию fetchMore
//EmployeeViewModel
class EmployeeViewModel: ObservableObject {
@Published var employees : [Employee] = []
func initialize() {
self.employees = [Employee(name: "A", id: "100"),
Employee(name: "B", id: "101"),
Employee(name: "C", id: "102"),
Employee(name: "D", id: "103"),
Employee(name: "E", id: "104"),
Employee(name: "F", id: "105"),
Employee(name: "G", id: "106"),
Employee(name: "H", id: "107"),
Employee(name: "I", id: "108"),
Employee(name: "J", id: "109"),
Employee(name: "K", id: "110"),
Employee(name: "L", id: "112"),
Employee(name: "M", id: "113"),
Employee(name: "N", id: "114"),
Employee(name: "O", id: "115"),
Employee(name: "P", id: "116"),
Employee(name: "Q", id: "117"),
Employee(name: "R", id: "118"),
Employee(name: "S", id: "119"),
Employee(name: "T", id: "120"),
Employee(name: "U", id: "121"),
Employee(name: "V", id: "122"),
Employee(name: "W", id: "123")]
}
//fetch more employees inside viewmodel
func fetchMoreEmployees(employee: Employee) {
if let index = self.employees.firstIndex(where: {$0.id == employee.id}) {
if index == self.employees.count - 1 {
print("Item: \(employee.name) - Reached bottom of list ")
} else if index == 0 {
print("Item: \(employee.name) - Reached top of list")
}
}
}
}
struct EmployeeView: View {
@ObservedObject var vm = EmployeeViewModel()
var body: some View {
NavigationView {
List {
ForEach(self.vm.employees) { employee in
EmployeeCellView(vm: self.vm, employee: employee)
}.listRowBackground(Color.white)
}.onAppear(perform: initialize)
.navigationBarTitle("Users", displayMode: .inline)
}
}
func initialize() {
self.vm.initialize()
}
}
struct EmployeeCellView: View {
@ObservedObject var vm: EmployeeViewModel
let employee: Employee
var body: some View {
Text("\(employee.name)").onAppear(perform: fetchMore)
}
func fetchMore() {
self.vm.fetchMoreEmployees(employee: self.employee)
}
}
Добавьте эту fetchMoreEmployees(employee: Employee)
функцию внутри вашей ViewModel и вызовите эту функцию в .onAppear()
ячейки, показанной выше.