我正在尝试读取纬度和经度数据,该数据存储在随机子ID下。我的数据结构如下:
这是我的检索代码。
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
没有价值?我该如何解决?谢谢!
答案 0 :(得分:1)
感谢大家的回应!确实是与展开Optional有关的问题。
我尝试了以前的解决方案。该解决方案对我来说效果最好,因为我从数据库中知道我肯定会拥有纬度和经度数据:交换为感叹号。
let latitude = (valueD.value as! NSDictionary)["Latitude"] as! Double
答案 1 :(得分:0)
您是否尝试过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)
}
}})
答案 2 :(得分:0)
您必须安全地打开可选组件。有很多方法可以做到这一点。我最喜欢的方法之一是使用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"])
}})