【发布时间】:2018-07-07 11:39:06
【问题描述】:
我一直在尝试弄清楚如何获取用户数据数组并将其与其他用户数组列表进行比较,以查看它是否与他们匹配。我查看了答案here,它表明我应该构造我的数据,使其非规范化,因此有重复。这种方法有效,但我现在正在努力将这些数组存储到一个数组中,以便以后使用。
这是我的数据结构的一个例子:
{
“skills”: [
{
"name": "Walking"
},
{
"name": "Running",
"usersWithSkill": [
“user1”: true,
“user2”: true,
“user3”: true
]
},
{
"name": "Swimming",
"usersWithSkill": [
“user3”: true
]
},
{
"name": "Dancing",
"usersWithSkill": [
“user1”: true,
“user3”: true
]
}
],
"users": {
"user1": {
"firstName": "Amelia",
"skillsList": [
"1": true,
"3": true
]
},
"user2": {
"firstName": "Elena",
"skillsList": [
"1": true,
]
},
"user3": {
"firstName": "John",
"skillsList": [
"1": true,
"2": true,
"3": true
]
},
“user4”: {
"firstName": "Jack",
"interestsList": [
"1": true,
"3": true
]
}
}
}
我可以查询 Jack 的兴趣。但是循环发生了两次,因此我正在努力添加一个数组来存储 Jack 正在寻找的用户的值。
这是我查询技能的方式:
var newArray = [String]()
func fetchSkillKeys() {
// Loop through the array of interest keys
for key in self.arrayOfInterestKeys {
let interestRef = Database.database().reference(withPath: "skills/\(key)/usersSkill")
interestRef.observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
for child in snapshot.children {
guard let snapshot = child as? DataSnapshot else { continue }
self.newArray.append(snapshot.key)
}
print(self.newArray)
})
}
}
这是我的数组在控制台上打印时的样子:
[]
["0", "1", "2"]
["0", "1", "2", "0", "1", "2"]
["0", "1", "2", "0", "1", "2", "0", "1"]
当我期待这样的事情时:
["0", "1", "2", "0", "1"]
更新
回复下面的评论,arrayOfInterestKeys 是从interestsList 中获取的键,我在查询我想观察的技能时用作参考,这是我获取它们的方法:
var arrayOfInterestKeys = [String]()
func fetchUserInterests() {
guard let uid = Auth.auth().currentUser?.uid else { return }
// Go to users interest list
let databaseRef = Database.database().reference(withPath: "users/\(uid)/interestsList")
// Observe the values
databaseRef.observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
// Loop through the interests list
for child in snapshot.children {
guard let snapshot = child as? DataSnapshot else { continue }
// Populate an empty array
self.arrayOfInterestKeys.append(snapshot.key)
}
})
}
【问题讨论】:
-
什么是键数组?当您开始查询时,那里有哪些值?
-
请从 firebase 控制台为您的数据结构提供图像,当您执行此操作时
print(self.arrayOfInterestKeys)您会得到什么输出? -
@DoesData 请查看更新后的答案。
-
@Ali 不确定您的意思,您要我截取我的 Firebase 数据结构的屏幕截图吗?
print(self.arrayOfInterestKeys)给了我 [1, 3] 这是 Jack 的兴趣。 -
是的,我的 Firebase 数据结构截图
标签: ios firebase firebase-realtime-database