标题可能看起来有问题,但我正在尝试弄清楚如何做到这一点。我的数据结构如下所示:
我想看看每个频道中是否都有用户。这将检查是否有通道:
channelRef.observeSingleEvent(of: .value, with: { (snapshot) -> Void in
for channelSnap in snapshot.children {
let channelData = (channelSnap as! FIRDataSnapshot).value as! Dictionary<String, AnyObject>
if let name = channelData["name"] as! String!, name.characters.count > 0 {
}
})
这当然会检查是否有一个孩子具有名为 name 的属性,如果是,则执行某些操作。我想要做的是循环遍历所有频道中的子级(频道)中的子级(频道中的用户)。我想检查该频道中是否有任何子频道,如果没有,请删除该频道。那么如何循环访问children通道中的children呢?我可以通过调用此函数来访问每个频道 ID:
让 id = (channelSnap as!FIRDataSnapshot).key
Edit:
这会打印出频道中没有用户:
channelRef.observeSingleEvent(of: .value, with: { (snapshot) -> Void in
for channelSnap in snapshot.children {
for child in (channelSnap as AnyObject).children {
let usersData = (child as! FIRDataSnapshot).value as? Dictionary<String, AnyObject>
if let randomUser = usersData?["userID"] as! String!{
print("user in the channel")
}
else
{
print("no user in channel")
}
}
Edit 2:
这是快照的打印,后面是通道快照的打印,当其中有一个用户时:
SNAPSHOT: Snap (channels) {
"-KePh6YFmQqQ6ZhEfTHn" = {
"-KePh6YHPLSAIEARfj-i" = {
PictureVersion = 2;
readyToGo = 0;
userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
username = pietje;
};
creator = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
currentPlayers = 1;
entryFee = 100;
gameType = normal;
maximumPlayers = 4;
name = "random channel";
password = "";
};
}
CHANNELSNAP: Snap (-KePh6YFmQqQ6ZhEfTHn) {
"-KePh6YHPLSAIEARfj-i" = {
PictureVersion = 2;
readyToGo = 0;
userID = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
username = pietje;
};
creator = SZlQ76RLCJQpFa0CDhrgFJoYzrs2;
currentPlayers = 1;
entryFee = 100;
gameType = normal;
maximumPlayers = 4;
name = "random channel";
password = "";
}