首页 > 解决方案 > Swift 只能从 firebase 中看到一个值(检索数据)

问题描述

编译器图片

我只能在我的应用程序上看到用户名而不是年龄,但我可以在编译器中看到这两个值,不确定是什么问题。

func fetchDataa(){
    // var ref: DatabaseReference!

    //  ref = Database.database().reference()
    guard  let currentUid = Auth.auth().currentUser?.uid else {return}
    Database.database().reference().child("users").child(currentUid).observeSingleEvent(of: .value, with: { (snapshot) in
        guard let dictionary = snapshot.value as? Dictionary<String , AnyObject> else {return}
        let uid = snapshot.key
        let user = User(uid:uid , dictionary: dictionary)

        print(Thread.current)
        print(Thread.main)

        self.userAgeLabel.text = user.userage
        self.user = user
               self.userAgeLabel.text = user.userage
               self.user = user

        print(snapshot.value)
        // Get user value
        //  let value = snapshot.value as? NSDictionary

        print(dictionary)


        // ...
    }) { (error) in
        print(error.localizedDescription)

    }

// 顺便说一句,这就是我将信息存储为字典的方式 // 存储用户信息

  let userID = Auth.auth().currentUser?.uid
        let userData = ["userName": userName,
            "userAge ": userAge] as [String? : Any]


        let ref = Database.database().reference()
        ref.child("users/\(userID ?? "")").setValue(userData)

      // ref.child("users").setValue(values)

}

// 用户初始化类

类用户{

var username:String!
var userage:String!
var uid:String!

初始化(uid:字符串,字典:字典){

self.uid = uid

if let username = dictionary [ "userName" ] as? String{

    self.username = username
}

if let userage = dictionary [ "userAge" ] as? String{
    self.userage = userage
}
}
}
}

Firebase 结构:

这里

标签: swiftfirebasefirebase-realtime-database

解决方案


你以某种方式"在房产周围增加了额外的费用userAge。所以关键是"userAge" 包括双引号。

要从字典中获取该值:

if let userage = dictionary [ "\"userAge\"" ] as? String{
    self.userage = userage
}

但今后您可能希望解决实际数据中的问题:在 Firebase 控制台中输入键时,您无需在其周围输入引号,因为键始终是字符串。


推荐阅读