Pagination with Firebase firestore - swift 4

前端 未结 4 951
情书的邮戳
情书的邮戳 2021-02-03 15:08

I\'m trying to paginate data (infinitely scroll my tableview) using firestore. I\'ve integrated the code google gives for pagination as best I can, but I\'m still having problem

4条回答
  •  盖世英雄少女心
    2021-02-03 15:48

    A little late in the game, but I would like to share how I do it, using the query.start(afterDocument:) method.

    class PostsController: UITableViewController {
    
        let db = Firestore.firestore()
    
        var query: Query!
        var documents = [QueryDocumentSnapshot]()
        var postArray = [Post]()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            query = db.collection("myCollection")
                      .order(by: "post", descending: false)
                      .limit(to: 15)
    
            getData()
        }
    
        func getData() {
            query.getDocuments() { (querySnapshot, err) in
                if let err = err {
                    print("Error getting documents: \(err)")
                } else {
                    querySnapshot!.documents.forEach({ (document) in
                        let data = document.data() as [String: AnyObject]
    
                        //Setup your data model
    
                        let postItem = Post(post: post, id: id)
    
                        self.postArray += [postItem]
                        self.documents += [document]
                    })
                    self.tableView.reloadData()
                }
            } 
        }
    
        func paginate() {
            //This line is the main pagination code.
            //Firestore allows you to fetch document from the last queryDocument
            query = query.start(afterDocument: documents.last!)
            getData()
        }
    
        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return postArray.count
        }
    
        override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
            // Trigger pagination when scrolled to last cell
            // Feel free to adjust when you want pagination to be triggered
            if (indexPath.row == postArray.count - 1) {
                paginate()
            }
        }
    }
    

    Result like so:

    Here is a reference.

提交回复
热议问题