从swift中的firebase检索数组元素

时间:2017-08-02 16:52:31

标签: ios arrays swift firebase

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

所以这是我的firebase数据库 Firebase Database

我可以检索其他元素:

数据库参考

class ViewController: UIViewController {

var ref: FIRDatabaseReference?
let fileName : String = "jsonFile"

方法

    func parseFirebaseResponse() { 
    ref?.child("Vandreture").child(fileName).observe(.value, with: 
    { (snapshot) in
            let dict = snapshot.value as? [String: AnyObject]
            let navn = dict!["navn"] as? String
            print(navn as Any)

            let type = dict!["type"] as? String
            print(type as Any)

            let Længde = dict!["length"] as? String
            print(Længde as Any)

            let link = dict!["link"] as? String
            print(link as Any)

        })

}

控制台显示结果 enter image description here

但是我搜索了一种检索经度/纬度对的方法, 第一对应该是 北纬109.987 经度102.987 - 但到目前为止没有运气 - 真的很感激帮助:)

3 个答案:

答案 0 :(得分:1)

我认为您应该将数据库重组为以下内容:

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"
           }
       }
   }
}

然后更容易获得坐标!

答案 1 :(得分:0)

将你的“位置”作为字典(又名[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)

答案 2 :(得分:0)

感谢Victor Apeland - 现在我改变了数据库的结构。我无法完全按照你的建议去做! 我将lon / lat连接成一个字符串(不是最好的 - 我知道 - 我是swift的新手,而firebase没有详细记录) enter image description here 从我的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)
    })
}
  • 在我的火力基础中,lon-lat被空格分割,所以我将字符串分割并转换为双倍。

    func formatPositions(pos : String) {
    let lotLangDivided = pos.components(separatedBy: " ")
    let longitude = Double(lotLangDivided[0])
    let latitude = Double(lotLangDivided[1]) 
    }
    

现在我得到了我想要的结果 - 感谢Victor和Khuong的帮助:)