如何检索航路点有不同的解决方案?

时间:2016-05-14 13:01:53

标签: swift firebase

  "-KHbCuQflKHrJiUmfpG0" : {
    "waypoints" : {
      "-KHbCuQflKHrJiUmfpG1" : {
        "latitude" : 13.17078652595298,
        "longitude" : -59.5775944578738
      },
      "-KHbCuQflKHrJiUmfpG2" : {
        "latitude" : 13.15541190861343,
        "longitude" : -59.57619643155932
      },
      "-KHbCuQg9W_tebl1pU66" : {
        "latitude" : 13.148444967591,
        "longitude" : -59.5589266947333
      }
    },
  "subtitle" : "jamesrick",
  "title" : "Highway",
  "type" : "polyline"
},

我在Firebase中使用了这种结构。如何使用嵌套节点航路点检索所有数据?

ref.observeEventType(.Value, withBlock: { polylines in
  if let objects = polylines.children.allObjects as? [FDataSnapshot] {
    for object in objects {
      polylineDictionary =  object.values as? Dictionary<String, AnyObjects> {

        //  ? ? ?

      }
    }
  }
  })

现在我可以访问标题,副标题,类型但是如何获得对航点的访问权限?当我使用

`polylineDictionary["waypoints"] as? [String: [String:Double]]` 

所以这些词典没有订购。谢谢你的一些建议。

2 个答案:

答案 0 :(得分:0)

这就是我如何获得嵌套的航点...它基本上是通过迭代键...我还会在抓住经度和纬度时添加一些错误检查,以确保它们在那里,但这是要点是:

if let polylineDictionary["waypoints"] as? [String: [String:Double]] {
           let waypoints = Array(polylineDictionary.keys)


           for i in 0..<waypoints.count {
              let waypointId = waypoints[i]
              let latitude = polylineDictionary[waypointId]["latitude"]
              let longitutde = polylineDictionary[waypointId]["longitude"]
           }

    }

答案 1 :(得分:0)

关于订购的问题并不清楚;如果你只是想要去航点,那就非常直接了:

假设您的完整Firebase结构为:

root_node
  "-KHbCuQflKHrJiUmfpG0" : {
    "waypoints" : {
      "-KHbCuQflKHrJiUmfpG1" : {
        "latitude" : 13.17078652595298,
        "longitude" : -59.5775944578738
      },
      "-KHbCuQflKHrJiUmfpG2" : {
        "latitude" : 13.15541190861343,
        "longitude" : -59.57619643155932
      },
      "-KHbCuQg9W_tebl1pU66" : {
        "latitude" : 13.148444967591,
        "longitude" : -59.5589266947333
      }
    },
  "subtitle" : "jamesrick",
  "title" : "Highway",
  "type" : "polyline"
  }

假设我想要这个特定节点的数据,-KHbCuQflKHrJiUmfpG0

let nodeRef = rootRef.childByAppendingPath("-KHbCuQflKHrJiUmfpG0")

nodeRef.observeSingleEventOfType(.Value , withBlock: { snapshot in

  print(snapshot.value) //prints everything in the node

  let title = snapshot.value["title"] as! String //to get any element
  print(title) //prints Highway

  var waypoints = [String: [String:String]]() //dict to hold key:value, unordered

  waypoints = snapshot.value["waypoints"] as! Dictionary
  print(waypoints) //prints the 3 waypoints and their children (as a dict)

  //get fancy and convert the dictionary to an array (which can be sorted)
  let arr = waypoints.map {"\($0) \($1)"}

  for point in arr {
      print(point)
  }
}