Firebase Databaseから特定の値を取得しようとしています。私はグーグルのようないくつかの文書を見ましたが、それはできませんでした。データベースのJSONファイルは次のとおりです。
{
"Kullanıcı" : {
"ahmetozrahat25" : {
"E-Mail" : "[email protected]",
"Yetki" : "user"
},
"banuozrht" : {
"E-Mail" : "[email protected]",
"Yetki" : "user"
}
}
}
スウィフトコード:
ref?.child("Kullanıcı").child(userName.text!).observeSingleEvent(of: .value, with: { (snapshot) in
if let item = snapshot.value as? String{
self.changedName = item
}
})
私は手に入れたい E-Mail
全員の値ではなく、ユーザーの値。どうやってやるの?
とうとう私は解決策を見つけました。 varを宣言して後で使用しようとするとnilが返されますが、snapshot.value as? String
を使用しようとすると問題ありません。これが私がやった例です。
ref: FIRDatabaseReference?
handle: FIRDatabaseHandle?
let user = FIRAuth.auth()?.currentUser
ref = FIRDatabase.database().reference()
handle = ref?.child("Kullanıcı").child((user?.uid)!).child("Yetki").observe(.value, with: { (snapshot) in
if let value = snapshot.value as? String{
if snapshot.value as? String == "admin"{
self.items.append("Soru Gönder")
self.self.tblView.reloadData()
}
}
})
コードでは、スナップショットには子の値の辞書が含まれます。それらにアクセスするには、snapshot.valueをDictionaryとしてキャストし、個々の子にアクセスするのは簡単です(ショット、笑)
ref?.child("Kullanıcı").child(userName.text!)
.observeSingleEvent(of: .value, with: { (snapshot) in
let userDict = snapshot.value as! [String: Any]
let email = userDict["E-Mail"] as! String
let yetki = userDict["Yetki"] as! String
print("email: \(email) yetki: \(yetki)")
})
「E-Mail」の子をクエリに追加します。
ref?.child("Kullanıcı").child(userName.text!).child("E-Mail").observeSingleEvent(of: .value, with: { (snapshot) in
if let item = snapshot.value as? String{
self.changedName = item
}
})