将 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 文档计数作为表行计数返回的主要内容,如果未能解决你的问题,请参考以下文章