我的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!
}
}
}
}
}
这就是我想要做的事情,但我遗憾的是如何将数据值存储在类中。仅供参考:用户名是个人资料下的属性。
答案 0 :(得分:0)
您当前正在遍历数据库中的整个用户列表并重复分配用户属性,覆盖上一个循环周期中的值。
为了获得分配的正确用户值,您需要一种了解值的正确路径的方法。我建议使用指定的Firebase UID保存用户。
如果您知道要查找的正确UID,则可以实现以下代码:
self._username = profileDict["username"] as? String ?? profileDict["name"] as! String
&#34;用户名&#34;的方式在您的原始代码中展开的力量并不安全,但我假设您确定它会解决问题。否则,应更改以下行以安全地打开可选项:
www.mysite.com/www.newsite.com