iOS Firebase извлекает данные из дочерних узлов всегда ноль - PullRequest
0 голосов
/ 12 марта 2019

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

enter image description here

Это мой код для извлечения.

ref.child("locations").observe(.value, with: { snapshot in
for child in snapshot.children  {
                let valueD = child as! DataSnapshot
                let randomkey = valueD.key
                print(randomkey)
                print(valueD.value)
                let lat = (valueD.value as? NSDictionary)?["Latitude"] as? String
                print(lat) 
}})

Для valueD.value,консоль печатает это (что правильно)

Optional({
Latitude = "1.342433333333333";
Longitude = "103.9639883333333";
Type = 0;
})

Однако для lat возвращается nil.

Почему для lat нет значения?Как я могу решить это?Спасибо!

Ответы [ 3 ]

1 голос
/ 12 марта 2019

Спасибо всем за ответ!Это действительно о проблеме с развертыванием Optional.

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

let latitude = (valueD.value as! NSDictionary)["Latitude"] as! Double
0 голосов
/ 12 марта 2019

Вы должны безопасно развернуть дополнительный.Есть много способов сделать это.Один из моих любимых способов - использовать оператор guard let

// This output already says 'Optional'
Optional({
Latitude = "1.342433333333333";
Longitude = "103.9639883333333";
Type = 0;
})

Разверните его так:

ref.child("locations").observe(.value, with: { snapshot in
for child in snapshot.children  {

                let valueD = child as! DataSnapshot
                let randomkey = valueD.key
                print(randomkey)
                print(valueD.value)

                // Unwrap
                guard let childValue = valueD.value else { return }
                print(childValue["Latitude"])
}})
0 голосов
/ 12 марта 2019

Вы пробовали с if let lat = child.value["Latitude"] as? Double?Как например:

ref.child("locations").observe(.value, with: { snapshot in
for child in snapshot.children  {

                let valueD = child as! DataSnapshot
                let randomkey = valueD.key
                print(randomkey)
                print(valueD.value)

                if let lat = child.value["Latitude"] as? Double {
                    print(lat)
                }
}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...