标题可能看起来不正确,但它试图弄清楚如何做到这一点。我的数据结构是这样的:如何检查儿童中的数据,在Firebase中的儿童
我想看看是否有每个通道呈现用户。这将工作,以检查是否有渠道:
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 {
}
})
检查当然这会在出现与属性名为名称的孩子,如果是的话,做的东西。我想要做的是通过所有频道中儿童(频道)中的儿童(频道中的用户)循环播放。我想检查频道是否有任何儿童,如果没有,请移除该频道。那么如何循环播放频道中的孩子呢?我有机会到每一个渠道ID通过调用这个函数:
设ID =(!channelSnap为FIRDataSnapshot).KEY
编辑:
这种打印出的通道中没有用户:
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")
}
}
编辑2:
这是快照打印,其后是打印的channelSnap,,同时有一个用户在里面:
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 = "";
}
是,KeJTqVREbMEmtD0oAk4是一个随机的用户。这可以工作,但我想以我的方式来做,其他我得到越来越多的地图。是否有可能在频道中搜索名为“userID”的键,因为该频道中的每个用户都应该有一个?如果用户标识没有密钥,则不存在用户。我想听听这是否可能! – Petravd1994
是的..你可以,但问题是'userId'是在一个radom id里面,所以你必须到处搜索它。除非你在某个地方有对该密钥的引用。 –
但是,如果你想这样做,你必须在channelSnap.children中添加另一个'for' .. '''用于shapshot.children中的channelSnap for {0} {0} {0}孩子在channelSnap.children { //在此处查找userId } } ''' –