web-dev-qa-db-ja.com

Swift Firebaseデータベースから特定の値を取得

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全員の値ではなく、ユーザーの値。どうやってやるの?

8
Ahmet Özrahat

とうとう私は解決策を見つけました。 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()
            }
        }
    })
8
Ahmet Özrahat

コードでは、スナップショットには子の値の辞書が含まれます。それらにアクセスするには、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)")
})
4
Jay

「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
    }
})
2
Rajesh73