使用Swift4从Firebase读取数据 - 具有childByAutoId上层节点

时间:2018-01-30 06:17:33

标签: ios swift firebase

我知道我已经观察过了,但是代码看起来应该是什么让我疯了!该应用程序使用childByAutoId上层节点向Firebase添加纬度和经度,我想阅读它们。

getData()旨在读取所有位置。

Swift 4

/**Data looks like this
-locations
-- L44dslhfhdslhf 
-----latitude: "90.8883"
-----longitude: "46.9732"
**/

var ref:DatabaseReference!
override func viewDidLoad() {
        super.viewDidLoad() 
        ref = Database.database().reference().child("locations")
    }

func addLocation(){
        let location = ["latitude": latitudeInput.text!,
                        "longitude": longitudeInput.text!,
            ] as [String : Any]
        ref.childByAutoId().setValue(location)
    }
func getData(){

/ **下面没有任何工作,我已尝试过各种不同的方法** /

        self.ref.child(<WHAT HERE>).observe(.value, with { (snapshot)} in

        if let snapshot =  snapshot.children.allObjects as? [DataSnapshot]{
                for snap in snapshot {
                    if let data = snap.value as? [String:AnyObject]{
                        let lat = data["latitude"]
                        let long = data["longitude"]
                        print(lat as Any)
                        print(long as Any)
                       }//end if
                }//end for
            }//end if
        }//end ref
    }//end getData

1 个答案:

答案 0 :(得分:0)

直接使用位置观察器很简单。当您使用autoid添加位置时,您不需要任何子密钥

以及您的代码

self.ref.child(<WHAT HERE>).observe(.value, with { (snapshot)} in

应该是

self.ref.observeSingleEvent(.value, with { (snapshot)} in

您可以观察单个事件的价值。所以用

读取所有当前值

之后

self.ref.observe(.childAdded, with { (snapshot)} in(将孩子添加到地点时致电)

希望它对你有所帮助