我看不到Firebase的价值迅速

时间:2019-04-01 23:10:53

标签: swift firebase firebase-realtime-database

Screen Shot 2019-04-01 at 4.45.08 PM enter image description here我想从存储的Firebase中获取值,我想将其打印到文本标签中,

func fetchData(){
    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.value
        let user = User(uid:uid as! String, dictionary: dictionary)
        self.user = user
    }) { (error) in
        print(error.localizedDescription)
    }
}

这是我设置文本标签的另一个代码

func fetchData(){
    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.value
        let user = User(uid:uid as! String, dictionary: dictionary)
        self.userNameLabel.text = user.username
        self.user = user

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

额外的代码以了解我在做什么

//已存储用户信息

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

        let ref = Database.database().reference()
        ref.child("users").childByAutoId().setValue(values)



}

2 个答案:

答案 0 :(得分:1)

  1. 我认为您应该使用回调与控制器进行异步通信。
  2. 在您的示例中,您使用“ snpashot.value”获取了uid,但您应该改用字典的键。
  3. 这是一个类似的示例:

    ///Function that returns as callback the user stored in Firebase with a certain id.
    func getUserFor(id: String, callback: @escaping (Bool, User?) -> Void) {
    
        //Get the user in Firebase "user" collection with the specific id.
        ref.child(Constants.userKey).child(id).observeSingleEvent(of: .value, with: { (userSnapshot) in
    
            guard let userDictionnary = userSnapshot.value as? [String:Any] else { return callback(false, nil) }
    
            let userId = userSnapshot.key
            let userEmail = userDictionnary[Constants.emailKey] as? String
    
            let user = User(id: userId, email: userEmail)
    
            return callback(true, user)
        }) { (error) in
            print(error.localizedDescription)
            return callback(false, nil)
        }
    }
    

答案 1 :(得分:0)

我找到了我没有以正确的方式在Firebase中设置用户存储信息的答案。

          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 /(userID ??”“”)“)。setValue(userData)//这是错误