swift - 在函数外部获取 let 值

标签 swift firebase firebase-realtime-database let

您好,我是 swift 编程新手,我想从 loadData() 获取 label 值,以用于我的数据库路径(引用)dbRef!.child(place+"/placeLabel")。我的意思是说?!我读取了“Dio Con Dio”节点上的数据。发生这种情况是因为 place 值为 let place = "Dio Con Dio"。因此,我的应用程序不会从“Paradosiako - Panorama”节点加载数据。我想从数据库加载所有内容,并且我认为如果我可以将 place 值更改为下一个节点,它就可以读取所有数据。

    import UIKit
    import FirebaseDatabase

    class PlacesTableViewController: UITableViewController {

        //MARK: Properties
        @IBOutlet weak var placesTableView: UITableView!

        //database reference
        var dbRef:FIRDatabaseReference?

        var places = [Places]()

        private var loadedLabels = [String: String]()
        private var loadedRatings = [String: Int]()

        //handler
        var handle:FIRDatabaseHandle?

        override func viewDidLoad() {
            super.viewDidLoad()

            dbRef = FIRDatabase.database().reference()

            // Loads data to cell.
            loadData()
        }

                private func loadData() {

                let place = "Dio Con Dio"

                dbRef!.child(place+"/placeLabel").observe(.childAdded, with: {
                    (snapshot) in
                    let label = snapshot.value as! String
                    self.updatePlace(snapshot.key, label: label)
                })
                dbRef!.child(place+"/rating").observe(.childAdded, with: {
                    (snapshot) in
                    let rating = snapshot.value as! Int
                    self.updatePlace(snapshot.key, rating: rating)
                })


            }

            private func updatePlace(_ key: String, label: String? = nil, rating: Int? = nil) {
                if let label = label {
                    loadedLabels[key] = label
                }
                if let rating = rating {
                    loadedRatings[key] = rating
                }
                guard let label = loadedLabels[key], let rating = loadedRatings[key] else {
                    return
                }
                if let place = Places(name: label, rating: rating) {
                    places.append(place)
                    placesTableView.reloadData()
                }
            }
        }

**My Database**

(此问题是后续问题 from this one 。)

最佳答案

很难在评论中解释这一点,所以我将在这里解决您当前的问题,但我相信保罗回答了您的问题。您甚至可以就此问题提出一个新问题。

这是您遇到问题的代码:

for (key, rating) in ratings.value as! [String: Int] {
            self.updatePlace(key, rating: rating)
        }

只要 ratings.value 用字符串:整数对填充,这段代码就没有问题。您的错误发生是因为不知何故缺少一个 key 。 (运行时发现NSNull,因此无法将数据转换为字典)

您需要在构建数组的位置设置一个断点:

placeSnapshot.childSnapshot(forPath: "rating")

(此处/本地称为评级)。如果可以忽略没有键的条目,则跳过它们并且不要将它们附加到数组中。但更有可能的是您遇到了错误,需要找出添加空值的原因...

这更有意义吗?如果 Paulo 解决了问题,请接受他的回答,并提出一个新问题,其中包含有关 childSnapshot (代码)的更多信息,一定有人会帮助您。 (我知道我会尝试。)

关于swift - 在函数外部获取 let 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43959004/

相关文章:

javascript - 类型错误 : Cannot read property 'map' of undefined while fetching data from the server

firebase - 完成您的请求 Firebase 时出错

ios - Swift:Parse 中的长查询(OR/AND 条件)

swift - 在 Swift 中按键分组字典

ios - 当我返回 TableViewController 时应用程序崩溃

python - 传感器Python DHT11

javascript - React + Firebase 保存问题。为什么这个哈希?

ios - 在 Swift 中的动态表中的自定义单元格之间移动数据

firebase - Firebase 中基于电话号码的身份验证(带数字)

Swift ,隐藏/删除窗口( View ?)