我正在尝试在swift 3中制作社交应用,而我正在使用Firebase。当我试图制造喜欢/不喜欢的系统时,我遇到了问题。所以每个帖子都有这个定义:
所以我正在检索数据库中的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函数的代码不起作用它应该像伪代码一样。提前谢谢!
答案 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)
}
}