从Swift 3.0中的Firebase获取数据

Eli*_*iko 5 ios firebase swift firebase-realtime-database swift3

我正在使用Firebase的应用程序.

在今天转移到swift 3.0之后,Xcode让我改变了这段代码:

ref.observeEventType(.ChildAdded, withBlock: { snapshot in
            let currentData = snapshot.value!.objectForKey("Dogs")
            if currentData != nil {
            let mylat = (currentData!["latitude"])! as! [String]
            let mylat2 = Double((mylat[0]))
            let mylon = (currentData!["longitude"])! as! [String]
            let mylon2 = Double((mylon[0]))
            let userid = (currentData!["User"])! as! [String]
            let userid2 = userid[0]
            let otherloc = CLLocation(latitude: mylat2!, longitude: mylon2!)
            self.distanceBetweenTwoLocations(self.currentLocation, destination: otherloc, userid: userid2)
            }
        })
Run Code Online (Sandbox Code Playgroud)

这段代码:

ref.observe(.childAdded, with: { snapshot in
            let currentData = (snapshot.value! as AnyObject).object("Dogs")
            if currentData != nil {
                let mylat = (currentData!["latitude"])! as! [String]
                let mylat2 = Double((mylat[0]))
                let mylon = (currentData!["longitude"])! as! [String]
                let mylon2 = Double((mylon[0]))
                let userid = (currentData!["User"])! as! [String]
                let userid2 = userid[0]
                let otherloc = CLLocation(latitude: mylat2!, longitude: mylon2!)
                self.distanceBetweenTwoLocations(self.currentLocation, destination: otherloc, userid: userid2)
            }
        })
Run Code Online (Sandbox Code Playgroud)

但在第二行它给我一个错误:

不能调用非函数类型的值'Any?!'

这是FireBase中的json数据:

{
  “user1” : {
    "Dogs" : {
      "User" : [ "siACmQZ7MDclDSO3hrCOp953kfl2" ],
      "latitude" : [ "32.172344" ],
      "longitude" : [ "34.858068" ]
    }
  “user2” : {
    "Dogs" : {
      "User" : [ "siACmQZ7MDclDSO3hrCOp953kfl2" ],
      "latitude" : [ "32.172344" ],
      "longitude" : [ "34.858068" ]
    }
  “user3” : {
    "Dogs" : {
      "User" : [ "siACmQZ7MDclDSO3hrCOp953kfl2" ],
      "latitude" : [ "32.172344" ],
      "longitude" : [ "34.858068" ]
    }
}
Run Code Online (Sandbox Code Playgroud)

Eli*_*iko 2

修复我的代码后,这是正确的解决方案:

ref.observe(.childAdded, with: { snapshot in
            if let snapshotValue = snapshot.value as? [String:Any],
                let currentData = snapshotValue["Dogs"] as? [String:Any] {
                let userid = (currentData["User"])! as! [String]
                let userid2 = userid[0]
                let mylat = currentData["latitude"] as! [String]
                let mylat2 = Double((mylat[0]))
                let mylon = (currentData["longitude"])! as! [String]
                let mylon2 = Double((mylon[0]))
                let otherloc = CLLocation(latitude: mylat2!, longitude: mylon2!)
                self.distanceBetweenTwoLocations(self.currentLocation, destination: otherloc, userid: userid2)
            }
Run Code Online (Sandbox Code Playgroud)