Значения Swift NSDictionary возвращают ноль даже после проверки, что внутри - PullRequest
0 голосов
/ 08 декабря 2018

Я не уверен, почему мои значения NSDictionary возвращают ноль даже после печати «employeeUserData» после того, как я назначил ему моментальный снимок firebase и увидел, что значения есть.Когда я запускаю свое приложение, чтобы проверить, могу ли я извлечь строки из NSDictionary, оно говорит, что это нулевое значение.Я использовал этот код раньше, и этот метод сработал, не знаю, почему вдруг он не работает и не возвращает ноль, и да, это кодирование, и все такое происходит постоянно, лол, просто пытаясь понять, почему именно эти проблемыпроисходит.Благодарю.

let employeeUid = Auth.auth().currentUser?.uid
var employeeUserData: NSDictionary?

override func viewDidLoad() {
    super.viewDidLoad()

    Database.database().reference().child("employees").child(employeeUid!).child("Business").observe(DataEventType.value, with: { (snapshot) in
        print("VALUE CHANGED IN USER_PROFILES")
        self.employeeUserData = snapshot.value as? NSDictionary
        //store the key in the users data variable
        self.employeeUserData?.setValue(employeeUid, forKey: "uid")
        print(self.employeeUserData!)
    }) { (error) in
        print(error.localizedDescription)
    }

    printUserData()
}


func printUserData() {
    print(self.employeeUserData!["businessuid"] as! String)
}

1 Ответ

0 голосов
/ 08 декабря 2018

Это потому, что вы извлекаете данные из базы данных асинхронно (что является правильным способом сделать это), но вы вызываете printUserData синхронно.Из-за этого printUserData() вызывается до того, как фактические данные будут получены и установлены.

Когда вы запускаете этот код, обратите внимание, что печать в printUserData() выполняется до вызова print(self.employeeUserData).

...