Неожиданное возвращаемое значение void в функции void в Swift с использованием numberOfRowsInSection - PullRequest
0 голосов
/ 17 октября 2018

Этот вопрос уже задавался много раз, но, похоже, ничего не работает в моем конкретном случае.Как вы можете видеть в моем коде ниже, я создал расширение моего View Controller для моего UITableViewDataSource.Я пытаюсь получить информацию из моей базы данных в реальном времени Firebase и в зависимости от того, что я получаю, возвращает определенный IntПроблема в том, что всякий раз, когда я пытаюсь вернуть Int из моментального снимка Firebase, я получаю эту ошибку: «Неожиданное возвращаемое значение в 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
    }
}

1 Ответ

0 голосов
/ 17 октября 2018

Ваша проблема в том, что это return numRows внутри блока базы данных, он не рассматривает возвращение каких-либо значений, также вызов асинхронный, поэтому не ожидайте, что он завершится до return 10 из numberOfRowsInSection, полностью удалитеэту часть и поместите ее внутрь 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...