Swift 在firebase-实时数据库中创建用户
我坚持创建Firebase用户 创建数据库后,我的数据库如下所示 我创建了一个struct用户,但我不知道如何创建正确的字典Swift 在firebase-实时数据库中创建用户,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我坚持创建Firebase用户 创建数据库后,我的数据库如下所示 我创建了一个struct用户,但我不知道如何创建正确的字典 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:
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}
struct用户{
让电子邮件:字符串
let name:String
让lastname:String
让电话:字符串
设置密码:String
让uid:String
出租汽车:[汽车]
init(uid:String,dictionary:[String:Any]){
self.uid=uid
self.email=字典[“电子邮件”]作为?字符串??“
self.name=字典[“名称”]作为?字符串??“
self.lastname=字典[“lastname”]作为?字符串??“
self.phone=字典[“phone”]作为?字符串??“
self.password=字典[“密码”]作为?字符串??“
self.car=dictionary[“car”]as?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存储用户,并在对象中跟踪用户的uid,以防需要引用该用户或在代码中的其他位置更新其节点
注意上面代码中的这一行
for child in snapshot.children.allObjects as! [DataSnapshot]
阅读时保留用户的顺序。这里有问题吗?您的代码和结构有什么问题,您想做什么?请查看以下两个提问指南:和。此外,请不要在问题中包含图像或链接。请将代码和结构作为文本包含,以便我们可以使用m以复制/粘贴方式回答。要获取Firebase结构,请使用Firebase控制台->导出JSON并复制并粘贴结构的一个片段。此外,namename
字段将不会填充,因为它在Firebase中的lastName
(大写N)。