swift - 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 结构:
解决方案
你以某种方式"
在房产周围增加了额外的费用userAge
。所以关键是"userAge"
包括双引号。
要从字典中获取该值:
if let userage = dictionary [ "\"userAge\"" ] as? String{
self.userage = userage
}
但今后您可能希望解决实际数据中的问题:在 Firebase 控制台中输入键时,您无需在其周围输入引号,因为键始终是字符串。
推荐阅读
- php - windows文件系统上不允许的编码和解码字符
- rabbitmq - RabbitMQ — 为什么错误的订阅者会收到发布的消息?
- php - 在 php 中:更改密码未在数据库中更新
- python - 如何使用 pytest 检查从函数返回的 False 值
- mysql - 是否有使用 LOAD DATA INFILE 导入包含多个工作表的 csv 文件
- c++ - Cmake 交叉编译错误(缺少 -lm -lc 和 crt0.o)
- c# - WebApi 异步与同步
- python - 在numpy中将部分减少累积到数组中
- javascript - 如何使用带有自定义数据配置的 amcharts 创建实心仪表图?
- c# - 将图像从 MVC 控制器传递到 WebAPI,以便它在 HttpContext.Current.Request.Files 中可用