Firebase获取数据

时间:2017-09-09 10:33:59

标签: ios firebase swift3 firebase-realtime-database

我正在尝试在swift 3中制作社交应用,而我正在使用Firebase。当我试图制造喜欢/不喜欢的系统时,我遇到了问题。所以每个帖子都有这个定义:

Firebase post description

所以我正在检索数据库中的Post(POJO)建模的对象数组中的每个帖子。我还在“info”组件中有喜欢/不喜欢的嵌套数据,这也是一组自定义对象。   问题是,当我遍历所有帖子(比如从关系数据库加入)时,我想初始化这个“info”对象数组。考虑到Firebase .observe函数是异步的,我应该如何解决这个问题...这是我的方法:

var postsArray = [Post]()
var userInfoArray = [userInfo]()


func getDataFromServer(){
posts.observe(DataEventType.childAdded, with: { (snapshot) in
        let values = snapshot.value! as! NSDictionary


        var postObject = Post()

        //getting posts and storing them into an array
        postObject.initialize(url: values["image"] as! String, userP: values["user"] as! String, earP: values["ear"] as! Bool, eyeP: values["eye"] as! Bool, textP: values["message"] as! String, uuidP: values["uuid"] as! String, keyP: snapshot.key) 

        self.keyArray.append(snapshot.key as! String)



        self.posts.child("\(postObject.key)").child("info").observe(DataEventType.value, with: { (snapshot) in
            if let info = snapshot.value as? NSDictionary{

                var infoForPost = [userInfo]()
                for eachEntry in info{

                //add to an array then set the info value for every post object
                infoForPost.append(eachEntry)


                }

                postObject.setInfo(infoForPost)
            }


        })






        self.postsArray.append(postObject)

        self.tableView.reloadData()


    })

我知道第二个.observe函数的代码不起作用它应该像伪代码一样。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我想你只需要观察帖子,因为在你的帖子里你也得到了信息,所以你可以这样做:

 posts.observe(DataEventType.childAdded, with: { (snapshot) in
           if let values = snapshot.value as? [String: Any] {


            var postObject = Post()


            self.keyArray.append(snapshot.key as! String)

            if let ceva = values["info"] as? [String: Any]{
                    print(ceva)



             }
           }

                postObject.setInfo(infoForPost)
       }

<强>更新

要获得更多值,您可以这样做:

let values = Array(ceva.values)


for i in 0..<values.count {

        if let singleValue = values[i] as? [String: Any], let approved = singleValue["Approved"], let disapprove = singleValue["disappreove"]  {
                print(approved)
                print(disapprove)
        }



}