swift - 在 Firebase 中创建用户 - 实时数据库
问题描述
我坚持创建一个 Firebase 用户。
创建我的数据库后看起来像这样
我创建了一个结构用户,但我不知道如何创建正确的字典
struct User {
let email : String
let name : String
let lastname : String
let phone : String
let password : String
let uid: String
let car : [Car]
init(uid: String, dictionary: [String: Any] ) {
self.uid = uid
self.email = dictionary["email"] as? String ?? ""
self.name = dictionary["name"] as? String ?? ""
self.lastname = dictionary["lastname"] as? String ?? ""
self.phone = dictionary["phone"] as? String ?? ""
self.password = dictionary["password"] as? String ?? ""
self.car = dictionary["car"] as? String ?? "" <- this is wrong
}
struct Car {
let firstCar : [FirstCar]}
struct FirstCar {
let brandName : String
let capacity : String
let carName : String
let fueal : String
let model : String
let power : String
let year : String}
帮助
解决方案
我想您是在询问如何在涉及一个子节点时从实时数据库中填充用户对象,该子节点也是一个键:值对。
我的建议是使用 DataSnapshots 尽可能长时间地保持 Firebase 的“firebasey”,而不是强制转换为字典;它使从子节点获取数据更加容易和清洁。
这是从 Firebase 读取用户节点的示例
var userArray = [UserClass]()
func readAllUsers() {
let usersRef = self.ref.child("users") //self.ref points to my firebase
usersRef.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children.allObjects as! [DataSnapshot] {
let user = UserClass(userSnap: child)
self.userArray.append(user)
}
})
}
然后是带有子键的 UserClass:值对与汽车品牌作为孩子
class UserClass {
var key = ""
var userName = ""
var userEmail = ""
var type = ""
var brand = ""
convenience init(userSnap: DataSnapshot) {
self.init()
self.key = userSnap.key
self.userName = userSnap.childSnapshot(forPath: "name").value as? String ?? "No Name"
self.userEmail = userSnap.childSnapshot(forPath: "email").value as? String ?? "No email"
let carSnap = userSnap.childSnapshot(forPath: "car") //retuns the car node
let firstCarSnap = carSnap.childSnapshot(forPath: "firstCar") //return the firstCar node
self.brand = firstCarSnap.childSnapshot(forPath: "brandName").value as? String ?? "No Brand"
}
}
最好通过用户的 uid 存储用户,并在对象中跟踪它,以防您需要在代码中的其他位置引用该用户或更新他们的节点。
注意上面代码中的这一行
for child in snapshot.children.allObjects as! [DataSnapshot]
在读入用户时保留用户的顺序。
推荐阅读
- flutter - 如何将 Flutter SliverApbar ExpandedHeight 更改为 250.0 以上?
- java - 弹性搜索 - 运算符 AND 的模糊性无法正常工作
- hc-05 - 扫描其他设备时出现 HC-05 问题
- android - Android 5.1 上的 CardView - 为什么显示菱形而不是圆形?
- python - 将具有相同键字符串的多个字典键值相加
- android - 尝试违反锁定任务模式
- android - 有多个好的构造函数,Room 会选择无参数的构造函数。如何解决此警告
- javascript - 引导轮播不工作(显示页面上的所有元素)
- javascript - 如何将 ng-repeat 值或 ID 传递给我的附加元素?这可能吗?
- c# - 如何设置 ComponentArt 数据网格以添加引导网格系统数据网格?