我尝试仅在包含10个网址的Firebase快照中访问第一个数据的属性。然而,无论我尝试什么,我都会得到整个快照。我的代码如下:
Down
有没有办法在整个快照上指定[0]等,这样我才能获得第一个数据?
答案 0 :(得分:2)
确定没有看到您的数据结构很棘手,但我认为您正在寻找:
myDataRef.limitToLast(10).on("child_added", function(snapshot) {
var newImg;
snapshot.forEach(function(urlSnapshot) {
if (!newImg) {
newImg = urlSnapshot.val();
}
});
console.log(newImg);
});
forEach()
遍历snapshot
的所有子键,并使用每个DataSnapshot
调用内部回调。
newImg = urlSnapshot.val();
只会获得该孩子的价值。您可能必须根据数据结构修改此位。
答案 1 :(得分:1)
我首先要说的是,没有保证数据在firebase中的存储顺序 - 第一项或第0项的概念取决于数据的存储方式和数据的检索方式。
所以最好的办法是将所有值加载为快照并按指定值(如日期或高度等)排序,然后从排序数组中选择第0个索引,或加载数据子集并使用queryOrderedByChild或queryStartingAtValue
这可能是问题的答案:它只检索指定节点中的第一个值:
users
user_0
firstName: "Fred"
user_1
firstName: "Bill"
user_2
firstName: "Ted"
和代码
usersRef.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in
if snapshot.value is NSNull {
print("snapshot was NULL")
} else {
print(snapshot)
}
})
和结果
Snap (user_0) {
firstName = Fred;
}
答案 2 :(得分:0)
您需要先将快照存储为数组,然后将其作为[0]访问。
我不在我的Mac电脑上(我回答你的问题和iOS一样,但我相信这个概念是一样的)所以这只是我的记忆,但如果语法是正确的:
var newImgArray = snapshot.children.objects为? [FSSnapshot] var newImg = newImgArray [0] .value