这是我的数据结构:很多俱乐部,每个俱乐部都有地址。我试图让数据库保持平稳。
现在我想在桌面视图中加载一些俱乐部信息。当我向下滑动iPhone屏幕时,它会加载一些俱乐部信息。
这是我的代码。但它会加载所有俱乐部信息。我怎样才能加载一些俱乐部,并在用户向下滑动时加载几个俱乐部?
func loadClubs() {
ref = Database.database().reference()
ref.child("club").observe(DataEventType.value, with: { (snapshot) in
//print("clubs: \(snapshot)")
let array:NSArray = snapshot.children.allObjects as NSArray
for obj in array {
let snapshot:DataSnapshot = obj as! DataSnapshot
if let childSnapshot = snapshot.value as? [String: AnyObject] {
if let clubName = childSnapshot["name"] as? String {
print(clubName)
}
}
}
})
}
答案 0 :(得分:3)
Firebase的查询支持分页,但它与您习惯的略有不同。 Firebase不使用偏移量,而是使用所谓的锚值来确定从哪里开始。
获取第一页的项目很简单,您只需指定要检索的项目数限制:
$mail->Body = "<div id='container' style='height:auto;font-
family:Helvetica;border: 1px solid #CCC;'>
<div id='header' style='margin: 0 auto;
background-color:#0958C3; color:#FFFFFF;
font-size: 20px;text-align: center;
display:block;
'>
<img src='cid:logo' alt='Picture Description'/> <br>
<strong>Heading</strong>
</div>
</div>";
现在在该区块内,跟踪您向用户显示的最后一项的关键字:
ref = Database.database().reference()
query = ref.child("club").queryOrderedByKey().limitToFirst(10)
query.observe(DataEventType.value, with: { (snapshot) in
然后,要获取下一页,请构建一个从您看到的最后一个键开始的查询:
for obj in array {
let snapshot:DataSnapshot = obj as! DataSnapshot
if let childSnapshot = snapshot.value as? [String: AnyObject] {
lastKey = childSnapshot.key
if let clubName = childSnapshot["name"] as? String {
print(clubName)
}
}
}
您需要再检索一个项目而不是页面大小,因为锚定项目将在两个页面中检索。
答案 1 :(得分:0)
我认为正确的方法是引用元素数组, 并为索引
创建变量var i = 0;
var club = null;
club = loadClubs(index); // here should return club with specified index;
// and increment index in loadClubs func,
// also if you need steped back --- and one more
// argument to function, for example
// loadClubs(index, forward) // where forward is
// boolean that says in which way we should
// increment or decrement our index
所以在你的例子中会是这样的:
func loadClubs(index, forward) {
ref = Database.database().reference()
ref.child("club").observe(data => {
var club = data[index];
if(forward){
index ++
}else{
index--
}
return club;
})
}