【问题标题】:Unexpected non-void return value in void function in Swift using numberOfRowsInSection使用 numberOfRowsInSection 在 Swift 中的 void 函数中意外的非 void 返回值
【发布时间】:2018-10-16 22:59:45
【问题描述】:

这个问题已经被问过很多次了,但在我的特殊情况下似乎没有任何效果。正如您在下面的代码中看到的那样,我为 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
    }
}

【问题讨论】:

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

您的问题是数据库块内的这个return numRows,它不考虑返回任何值,而且调用是异步的,所以不要指望它在numberOfRowsInSectionreturn 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

【讨论】:

  • 这不再返回错误,但它并没有达到我的预期。我认为在我的代码中做了一些让你感到困惑的事情。另外,感谢底部的注释,我的意思是使用 %.无论如何,我已经编辑了我的问题,所以现在在我想要的上下文中可能会有意义。
猜你喜欢
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多