Swift 在firebase-实时数据库中创建用户

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:

我坚持创建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: 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)。