将 Firebase 文档计数作为表行计数返回

Posted

技术标签:

【中文标题】将 Firebase 文档计数作为表行计数返回【英文标题】:Return Firebase Document Count as Table Row Count 【发布时间】:2018-07-01 19:48:21 【问题描述】:

我有一个函数可以获取集合中 firestore 文档的计数,我想将此计数用作表视图函数 numberOfRowsInSection 的返回值。在从服务器检索计数并使程序崩溃之前调用 return。我相信我需要使用闭包来让返回等待完成,但我不确定如何从闭包中返回一个整数。我对 swift 很陌生,甚至对 Closures 也很陌生。

func getCount(completion: @escaping (Int) -> (Int)) 
    let today = getToday()
    let eventsRef = db.collection("users").document("test@test.com").collection(today)
     eventsRef.getDocuments()  (querySnapshot, err) in

            if let err = err 
                print("Error getting documents: \(err)")

             else 
                completion((querySnapshot?.count)!)
            

    

    

 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 


        getCount  (count) in

            self.count = count
        

        return count!

    

【问题讨论】:

【参考方案1】:

你需要设置一个实例数组

var arr = [<#typeHere#>]()

//

在这里返回它的计数

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
   return arr.count

并在此处重新加载表格

func getCount(completion: @escaping (Int) -> (Int)) 
  let today = getToday()
  let eventsRef = db.collection("users").document("test@test.com").collection(today)
  eventsRef.getDocuments()  (querySnapshot, err) in
        if let err = err 
            print("Error getting documents: \(err)")
          
         // fill the array here  
         tableView.reloadData() // if it's a background thread embed code in DispatchQueue.main.async ---
    

【讨论】:

在哪里可以调用getCount函数?我从 numberofrows 函数中调用它,并以无限循环结束,它不断重新加载表......这对我来说很明显。 你需要在 viewDidLoad 里面调用它 我的 tableview 委托和数据源在一个单独的类文件中。我可以将一个整数从视图控制器传递给这个单独的类文件吗? 在该类中声明一个 var 并在创建对象时为该 var 赋值,也可以使用委托模式 我不确定我是否遵循您的逻辑...您能给我看一个简短的 sn-p 吗?很抱歉占用您这么多时间!

以上是关于将 Firebase 文档计数作为表行计数返回的主要内容,如果未能解决你的问题,请参考以下文章

如何使用单个查询获取存储在不同变量中的多个表行的计数?

如何在Firebase中获取用户数作为计数在android TextView中

使用 Firebase Firestore 实现幂等计数器

将数据库中的计数作为变量返回到 PHP [重复]

Flutter Firebase 儿童计数

将记录计数插入到不同的表中