gpt4 book ai didi

ios - Swift 中使用 numberOfRowsInSection 的 void 函数出现意外的非 void 返回值

转载 作者:行者123 更新时间:2023-11-30 11:04:48 25 4
gpt4 key购买 nike

这个问题已经被问过很多次了,但在我的具体情况下似乎没有任何效果。正如您在下面的代码中看到的,我为 UITableViewDataSource 创建了 View Controller 的扩展。我正在尝试从我的 Firebase 实时数据库中提取信息,并根据我得到的信息返回某个 Int。问题是,每当我尝试从 Firebase 快照中返回 Int 时,我都会收到此错误:“void 函数中出现意外的非 void 返回值。”我明白其原因,但我不确定如何使我的代码工作。有什么解决办法吗?

我的代码:

extension LikeOrDislikeViewController: UITableViewDataSource {

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

let uid = Auth.auth().currentUser?.uid

Database.database().reference().child("Num Liked").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let numMoviesLiked = ((dictionary["Number of Movies Liked"] as? Int))!

if numMoviesLiked%4 == 0 {
return numMoviesLiked/4
}
}
})
return 10
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = UITableViewCell()
cell.backgroundColor = UIColor.red
tableView.rowHeight = 113
cell.textLabel?.text = "\(indexPath.row)"

return cell
}
}

最佳答案

您的问题是数据库 block 内的return numRows,它不考虑返回任何值,而且调用是异步的,因此不要期望它在返回之前完成numberOfRowsInSection的10,完全去掉这部分,放到viewDidLoad

里面
Database.database().reference().child("Num Liked").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let numMoviesLiked = ((dictionary["Number of Movies Liked"] as? Int))!

if numMoviesLiked/4 == 0 {
numRows = numMoviesLiked/4
self.tableView.reloadData()
}
}
})
<小时/>

从逻辑上讲,如果仅当您比较 numMoviesLiked/4 == 0 时,那么 numRows 将始终为 0

关于ios - Swift 中使用 numberOfRowsInSection 的 void 函数出现意外的非 void 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52845066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com