Firebase получить данные объекта карты - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь получить адрес, который я сохранил в объекте Map в Firebase.

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

Вот моя структура Firebase

Here is my Firebase Structure

Это мой запрос к Firebase

let key = UserDefaults.standard.value(forKey: "uid") as? String ?? "Null"
        let docRef = firebaseDB.collection("user").document(key)
        docRef.getDocument { (document, error) in
            if let document = document, document.exists {
                let docData = document.data()

                let city = docData!["city"] as! String
                let country = docData!["country"] as! String
                let county = docData!["county"] as! String
                let lineOne = docData!["lineOne"] as! String
                let lineTwo = docData!["lineTwo"] as! String
                let postCode = docData!["postCode"] as! String

                print(city,country,county,lineOne,lineTwo,postCode)
            } else {
                print("Document does not exist")

            }

1 Ответ

0 голосов
/ 24 февраля 2019

Если происходит сбой

let city = docData!["city"] as! String

, это означает, что узел не содержит дочерний элемент 'city'.Возможно, он полностью отсутствует, или вместо города есть Город.

Принудительное развертывание переменной (например, как!), Которая потенциально может быть равна нулю, по сути означает «Эй, вар, вы никогда не будете равны нулю» и может привести к сбою приложения.и нестабильность.

Лучший способ справиться с этим и защитить свой код - правильно обрабатывать данные в тех случаях, когда они могут отличаться от ожидаемых.

Лучший способ - использовать объединение нулейнапример, это обеспечивает значение по умолчанию, если city равен nil

let city = data!["city"] as? String ?? "no city selected"

или если вы хотите работать с nil, измените способ чтения дочерних узлов на

let city = document.get("city")

Помня о том, что хотя этот код не будет аварийно завершаться, city может быть нулевым в этой ситуации, поэтому вам необходимо соответствующим образом обработать это в коде, следующем за этим оператором.

Вы также можете использоватьПозвольте заявления

var aPlace = PlaceStruct()

if let city = document.get("city") as? String {
    aPlace.city = city
} else {
    aPlace.city = "Hometown"
}

или защитные заявления для защиты ваших данных.

Независимо от ситуации, не заставляйте развернуть потенциально ноль переменных, если вы не знаете, что они будут никогда не быть ноль - обрабатывать те переменные, которые могут быть ноль изящно.

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