Ios 在swift中从firebase检索数组元素
我是swift和firebase的新手,从firebase数据库检索数组元素时遇到困难 这是我的firebase数据库 我可以像这样检索其他元素:Ios 在swift中从firebase检索数组元素,ios,arrays,swift,firebase,Ios,Arrays,Swift,Firebase,我是swift和firebase的新手,从firebase数据库检索数组元素时遇到困难 这是我的firebase数据库 我可以像这样检索其他元素: Vandreture { jsonFile { length: "16.2" link: "www.second.com" navn: "Kagerup rundt" positions { -KqXukxnw3mL38oPeI4y {
Vandreture {
jsonFile {
length: "16.2"
link: "www.second.com"
navn: "Kagerup rundt"
positions {
-KqXukxnw3mL38oPeI4y {
x: "102.987"
y: "109.987"
}
-KqXukxnw3mL38oPeI5- {
x: "108.234"
y: "99.098"
}
}
}
}
数据库参考
类ViewController:UIViewController{
var ref:FIRDatabaseReference?
让fileName:String=jsonFile
方法
func parseFirebaseResponse{
ref?.childVandreture.childfileName.observe.value,带有:
{snapshot in
让dict=snapshot.value为?[字符串:AnyObject]
让navn=dict![navn]作为?字符串
打印导航
让type=dict![type]as?字符串
打印类型(如有)
设Længde=dict![length]为?字符串
如有必要,请打印
让link=dict![link]作为?字符串
打印链接(如有)
}
}
控制台显示结果
但我已经找到了一种方法来检索经纬度对,
第一对应该是
纬度109.987
经度102.987
-但到目前为止,如果运气不好,我们将非常感谢您的帮助:获得您作为字典的位置,即[String:AnyObject] 然后得到纬度和经度的数组,然后将每个元素从纬度和经度映射到一个元组或类似的东西中
guard let position = dict!["position"] as? [String: AnyObject],
let latitudeArray = position["latitude"] as? [String],
let longitudeArray = position["longitude"] as? [String] else { return }
print(latitudeArray)
print(longitudeArray)
我认为您应该将数据库重组为以下内容:
Vandreture {
jsonFile {
length: "16.2"
link: "www.second.com"
navn: "Kagerup rundt"
positions {
-KqXukxnw3mL38oPeI4y {
x: "102.987"
y: "109.987"
}
-KqXukxnw3mL38oPeI5- {
x: "108.234"
y: "99.098"
}
}
}
}
那么获取您的坐标就容易多了!谢谢Victor Apeland-现在我更改了数据库的结构。我无法完全按照您的建议执行!! 我将lon/lat连接为一个字符串,这不是最好的-我知道-我是swift的新手,firebase也没有很好的文档记录 为了从long/lat中检索各个元素,我使用了这个方法,并且我对第一次阅读特别感兴趣,所以我制作了一个列表,填充它,并获取第一个元素,将其解析为一个新方法
func responsePosition() {
var positions = [String]()
ref?.child("Vandreture").child(fileName).child("position").observe(.value, with: { (snapshot) in
for snap in snapshot.children {
let userSnap = snap as! FIRDataSnapshot
let uid = userSnap.key //the uid of each user
let userDict = userSnap.value as! String
positions.append(userDict)
}
let pos : String = positions[0]
self.formatPositions(pos : pos)
})
}
在我的firebase中,lon lat被一个空格分开,所以我将绳子分开,并将其掷成两倍
func formatPositions(pos : String) {
let lotLangDivided = pos.components(separatedBy: " ")
let longitude = Double(lotLangDivided[0])
let latitude = Double(lotLangDivided[1])
}
现在我得到了我想要的结果
-感谢Victor和Khuong的帮助:在那里检查我的答案,应该给出正确的方向当我将代码添加到我的方法中,运行程序并检查调试器时,位置有2个键/值对,分别是经度和纬度,但latitudeArray和LongtudeArray不包含任何元素,因此它们不会向cons打印任何内容对不起,这应该是LongitudArray=位置[经度],而不是LongitudArray=位置[纬度]:D