如何阅读firebase数据库

时间:2017-08-28 08:02:31

标签: swift firebase-realtime-database

这是我的数据结构:很多俱乐部,每个俱乐部都有地址。我试图让数据库保持平稳。

现在我想在桌面视图中加载一些俱乐部信息。当我向下滑动iPhone屏幕时,它会加载一些俱乐部信息。

enter image description here

这是我的代码。但它会加载所有俱乐部信息。我怎样才能加载一些俱乐部,并在用户向下滑动时加载几个俱乐部?

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)
                    }
                }
            }
        })

    }

2 个答案:

答案 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;
    })    
}