阅读/检索Firebase中的数据
问题描述:
我是Swift 3的初学者(使用iOS 8.3)。我一直在想办法分离数据,但没有运气。基本上,我能够从火力地堡中提取以下数据:阅读/检索Firebase中的数据
{
Database = {
Kelvin = {
Institution = xxx;
"Years of Experience" = "2.5";
location = London;
};
Sophia = {
Institution = xxxx;
"Years of Experience" = 3;
location = London;
};
};
Users = {
SOOlIFsjn3839jcmlBbVEnSRH3 = {
email = "[email protected]";
password = 1234567;
};
};
}
但现在我要对数据进行分离,这样它会显示这样的事情:
var ref: FIRDatabaseReference!
ref = FIRDatabase.database().reference()
ref.observe(FIRDataEventType.value, with: { (snapshot) in
if let mydata = snapshot.value as? NSDictionary {
print(mydata)
if let namedata = mydata["Database"] as? NSArray {
print(namedata[0]) //Prints Kelvin
print(namedata[1]) //Prints Sofia
}
然而,斯威夫特不让我这样做,它告诉我我不能将NSDictionary类型转换为NSArray。有任何想法吗?非常感谢。
答
Firebase集合是键值对。对于JSON的每个键,您可以找到相应的值。
所以你需要转换为String,Object的NSDictionary
。该字典中的键将是Kelvin
和Sophia
。每个值都是相应键下的值。
答
READ/RETRIVING DATA FROM火力数据库中的NSDictionary
读取数据它改变
可以使用FIRDataEventTypeValue事件在给定的路径来读取数据,因为它存在于每一次事件发生的时间。该方法在监听器连接时触发一次,每当数据(包括任何子节点)发生更改时都会再次触发该方法。事件回调会传递包含该位置所有数据的快照,包括子数据。如果没有数据,则返回的快照值为零。
/*FIREBASE VALUE_EVENT_LISTENER */
func getModelFromFirebase(){
var firDatabaseReference: FIRDatabaseReference!
firDatabaseReference = FIRDatabase.database().reference(withPath: "referencePath")
firDatabaseReference.child("referenceKey").child(bookingId).observe(FIRDataEventType.value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
// Play with dict..
}) { (error) in
print(error.localizedDescription)
}
}
读取数据一旦
这对于只需要加载一次,并预计不会频繁改变或需要积极地倾听数据非常有用。例如,前面示例中的博客应用程序使用此方法在用户配置文件开始创作新帖子时加载用户配置文件。
/* FIREBASE SINGLE_VALUE_EVENT_LISTENER */
func getModelFromFirebase(){
var firDatabaseReference: FIRDatabaseReference!
firDatabaseReference = FIRDatabase.database().reference(withPath: "referencePath")
firDatabaseReference.child("referenceKey").observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
// play with data Snapshot...
}) { (error) in
print(error.localizedDescription)
}
}