Ios 在swift中从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 {

我是swift和firebase的新手,从firebase数据库检索数组元素时遇到困难

这是我的firebase数据库

我可以像这样检索其他元素:

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