我是Firebase的新手,我正在尝试构建一个应用,当用户启动应用时,它会显示随机用户个人资料(有点像Tinder)。
经过几个小时的测试后,我找到了一个可行的解决方案,但如果感觉不对劲!我叫另一个观察者的观察者,这个好吗?两个连接?我不知道,但感觉很糟糕!但是我无法找到另一种解决方案。
我的代码好还是坏?如果不正确,有人可以给我一些很好的建议吗?
我的firebase数据库结构:
"profiles": {
"1": {
"name": "John Doe",
"age": "36",
"location": "Los Angeles",
"gender": "male",
},
"2": { ... },
"3": { ... }
},
我的Swift IOS Firebase代码
var profilesRef: DatabaseReference!
let profilesRef = Database.database().reference().child("profiles")
profilesRef.observe(.value, with: { (snapshot) in
let profilesCount = snapshot.childrenCount
let diceRoll : String = String(arc4random_uniform(UInt32(postsCount)))
profilesRef.child(diceRoll).observeSingleEvent(of: .value, with: { (snapshot) in
if let profileDict = snapshot.value {
let profile = Profile(profileData: profileDict as! Dictionary<String, AnyObject>)
print(profile.age)
}
})
})
它有效,但感觉不对。
答案 0 :(得分:0)
无需再次从数据库中提取数据。您可以做的是获取从第一个快照收到的快照,将值存储在字典中,然后获取密钥“diceroll”的值。 您已经提取了一次数据,无需再次执行此操作。
另外,请注意,将个人资料存储在某个数字下并不是一种好习惯,因为如果有人删除了他们的个人资料,或者两个人同时创建个人资料,则数据会有差异。我建议查看“childByAutoID”,然后你可以通过将它们存储在一个数组中并选择一个随机索引来随机化用户选择。
如果您有任何疑问,请告诉我们。