2017-08-02 57 views
0

我完全新的迅速和火力点,而且我有从火力数据库中检索数组元素的困难从火力检索数组元素中迅速

所以这是我的火力数据库 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 - 但到目前为止没有运气 - 帮助真的很感激:)

+0

https://开头计算器。com/a/45143371/7715250在那里检查我的答案,应该给出正确的方向 –

回答

0

获取您的“位置”作为字典(又名[字符串: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) 
+0

当我将代码添加到我的方法中时,运行程序并检查调试器,“位置”具有2个键/值对,它们是“经度”和“纬度”,但latitudeArray和longitudeArray不包含任何元素,因此它们不会打印任何东西到控制台 –

+0

抱歉,这应该是'let longitudeArray = position [“longitude”]'而不是'let longitudeArray = position [“纬度“]':D – Khuong

+0

@MartinUtzon你编辑过吗? – Khuong

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

然后让你的坐标将容易得多!

0

感谢Victor Apeland--现在我改变了数据库的结构。我无法完全按照你的建议做! 我连接了lon/lat作为一个字符串(不是最好的 - 我知道 - 我是一个新手快速,并且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]) 
    } 
    

现在我得到的结果,我想 - 感谢您的帮助维克多和Khuong :)