【问题标题】:retrieve array elements from firebase in swift快速从firebase中检索数组元素
【发布时间】:2017-08-02 16:52:31
【问题描述】:

我对 swift 和 firebase 完全陌生,我在从 firebase 数据库中检索数组元素时遇到了困难

这是我的 firebase 数据库

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

数据库参考

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)

        })

}

控制台显示结果

但我已经寻找一种方法来检索经度/纬度对, 第一对应该是 纬度 109.987 经度 102.987 - 但到目前为止没有运气 - 非常感谢您的帮助:)

【问题讨论】:

标签: ios arrays swift firebase


【解决方案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"
           }
       }
   }
}

那么获取坐标会容易得多!

【讨论】:

    【解决方案2】:

    将您的“位置”作为字典(又名 [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 个键/值对,即“经度”和“纬度”,但 latitudeArray 和 longitudeArray 可以不包含任何元素,因此它们不会向控制台打印任何内容
    • 对不起,这应该是let longitudeArray = position["longitude"] 而不是let longitudeArray = position["latitude"] :D
    【解决方案3】:

    感谢 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 被一个空格分隔,所以我将字符串拆分并强制转换为 double。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多