繁体   English   中英

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

[英]Read data from Firebase using Swift4 - has childByAutoId upper node

我知道我必须“观察”,但是正是代码看起来像让我发疯了! 该应用程序使用childByAutoId上层节点向Firebase添加了经度和纬度,我想阅读这些经纬度。

getData()用于读取所有位置。

斯威夫特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

它很容易直接使用位置观察器。 因为您要添加具有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 (在将孩子添加到位置时调用)

希望对您有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM