如何解析firebase中的数据,然后将其保存在模型中。 Swift3 MVC格式

时间:2017-07-28 00:53:07

标签: swift firebase model-view-controller firebase-realtime-database

我的firebaseDB中有一个用户类。您期望平面文件DB的外观如下:users-> UID-> profile-> key / values。我试图在我的代码中实现最佳实践,所以我希望数据由我的Xcode项目中的User模型处理。我将如何解析数据并将其保存为模型中的类变量。

class User {
    private var _username: String
    private var _uid: String
    
    var uid: String {
        return _uid
    }
    
    
    var username: String {
        return _username
    }
    
    
    init (uid: String, username:String) {
                self._uid = uid
                self._username = username
    }
    
    func getUserData() {
        DataService.ds.REF_USERS.observeSingleEvent(of: .value, with: { (snapshot) in
            if let users = snapshot.value as? Dictionary<String, Any>{
                for (key, value) in users { // We use the for in loop to iterate through each key/value pair in the database which is stored as a dictionary.
                    if let dict = value as? Dictionary<String, Any> { // This gets us inside the user ID
                        if let profile = dict["profile"] as? Dictionary<String, Any> { // This gets us inside the profile
                            if let username = profile["username"] as? String {
                                self._uid = key // Stores the UID of the user as the key.
                                self._username = username
                            } else {
                                let username = profile["name"] as? String
                                self._uid = key
                                self._username = username!
                            }
                        }
                    }
                    
                }
            }

这就是我想要做的事情,但我遗憾的是如何将数据值存储在类中。仅供参考:用户名是个人资料下的属性。

1 个答案:

答案 0 :(得分:0)

您当前正在遍历数据库中的整个用户列表并重复分配用户属性,覆盖上一个循环周期中的值。

为了获得分配的正确用户值,您需要一种了解值的正确路径的方法。我建议使用指定的Firebase UID保存用户。

如果您知道要查找的正确UID,则可以实现以下代码:

self._username = profileDict["username"] as? String ?? profileDict["name"] as! String

&#34;用户名&#34;的方式在您的原始代码中展开的力量并不安全,但我假设您确定它会解决问题。否则,应更改以下行以安全地打开可选项:

www.mysite.com/www.newsite.com