【发布时间】:2020-04-30 18:33:35
【问题描述】:
我正在尝试在我的应用中实现分页。当应用程序加载时,我想加载第一项可以说。然后每次他单击刷新时都会加载一个新项目。 我已经在我的视图模型中实现了这个逻辑。
第一次在我的 SceneDelegate 中调用 homeViewModel.load()
let homeViewModel = HomeViewModel()
homeViewModel.refresh()
然后每次用户想要获取新日期时,我都会致电homeViewModel.refresh()
问题是,当应用加载时,我没有得到任何结果,当我点击刷新时,我不断地在表格中获取第二个文档。
我在这里做错了什么?
我的 HomeViewModel:
class HomeViewModel: ObservableObject, LoadProtocol {
var firestoreService: FirestoreService = FirestoreService()
@Published var items: [Item] = []
let db = Firestore.firestore()
var first: Query = Firestore.firestore().collection("items").limit(to: 1)
load() {
self.first.addSnapshotListener { (snapshot, error) in
guard let snapshot = snapshot else {
print("Error retrieving cities: \(error.debugDescription)")
return
}
guard let lastSnapshot = snapshot.documents.last else {
// The collection is empty.
return
}
// Construct a new query starting after this document,
// retrieving the next 25 cities.
let next = self.db.collection("items")
.start(afterDocument: lastSnapshot).limit(to: 1)
self.first = next
// Use the query for pagination.
}
}
func refresh() {
self.firestoreService.fetchCollection(query: self.first) { (result: Result<[Item], Error>) in
switch result {
case .success(let items):
self.items += items
self.addToCategories()
case .failure(let error):
print(error)
}
}
}
}
【问题讨论】:
-
嗯。这很可疑
.limit(to: 1) -
它只是用于测试。可能是 20,但我没有那么多数据
-
解决方案对您有用吗!?
标签: ios swift firebase google-cloud-firestore swiftui