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

时间:2018-07-01 19:48:22

标签: ios swift uitableview firebase google-cloud-firestore

我有一个函数,该函数获取集合中Firestore文档的计数,并且我希望将此计数用作表视图函数numberOfRowsInSection的返回值。从服务器检索计数并导致程序崩溃之前,将调用该返回。我相信我需要使用闭包来使返回等待完成,但是我不确定如何从闭包中返回整数。我是新手,但对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 个答案:

答案 0 :(得分:2)

您需要设置一个实例数组

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 {---}
    }
}