Swift может видеть только одно значение из базы данных (получение данных) - PullRequest
0 голосов
/ 07 апреля 2019

compiler  picture

Я могу видеть только имя пользователя в моем приложении, но не возраст, но я вижу оба значения в компиляторе, не зная, в чем проблема.

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!

init (uid: String, словарь: Словарь) {

self.uid = uid

if let username = dictionary [ "userName" ] as? String{

    self.username = username
}

if let userage = dictionary [ "userAge" ] as? String{
    self.userage = userage
}
}
}
}

Структура Firebase:

Here

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Вы как-то добавили " вокруг свойства userAge. Таким образом, ключ "userAge" , включая двойные кавычки.

Чтобы получить это значение из словаря:

if let userage = dictionary [ "\"userAge\"" ] as? String{
    self.userage = userage
}

Но в дальнейшем вы, вероятно, захотите исправить проблему в реальных данных: при вводе ключа в консоли Firebase вам не нужно вводить кавычки вокруг него, поскольку ключи всегда являются строками.

0 голосов
/ 07 апреля 2019

Можете ли вы попробовать это?

        Database.database().reference().child("users").child(currentUid).observeEvent(of: .value, with: { (snapshot) in
 if let dictionary = snapshot.value as? [String: Anyobject] {
 let userAgeDictionary = dictionary["age"] as? String
print(userAgeDictionary)

Распечатывает ли это возраст?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...