如何使用类返回firebase数据?

时间:2016-04-01 16:07:02

标签: ios swift firebase firebase-realtime-database

我有一个UICollectionView,我使用类填充数据。截至目前,我正在使用虚拟数据填充它,如下面的代码所示。我试图用我的Firebase数据库中的数据替换这个虚拟数据。

import UIKit

class MrNobody
{
// MARK: - Public API
var title = ""
var description = ""
var numberOfMembers = 0
var numberOfPosts = 0
var featuredImage: UIImage!

init(title: String, description: String, featuredImage: UIImage!)
{
    self.title = title
    self.description = description
    self.featuredImage = featuredImage
    numberOfMembers = 1
    numberOfPosts = 1
}

// MARK: - Private
// dummy data
static func createMrNobody() -> [MrNobody]
{
    return [
        MrNobody(title: "some text" , description: "some text", featuredImage: UIImage(named: "r1")!),
        MrNobody(title: "some text" , description: "some text", featuredImage: UIImage(named: "r1")!),
        MrNobody(title: "some text" , description: "some text", featuredImage: UIImage(named: "r1")!),

    ]
}
}

为了包含数据,我添加了import Firebase,使用let ref = Firebase(url: "my app url")识别我的firebase数据库并使用

读取数据
 ref.observeEventType(.Value, withBlock: { snapshot in
print(snapshot.value)
}, withCancelBlock: { error in
print(error.description)
})

我能够读取子数据,但我无法在函数的return块中使用它。理想情况下,我想使用enumerator = snapshot.childrenCount,并反复使用return函数,因为感兴趣的节点中有很多孩子。

任何帮助/方向将不胜感激。

1 个答案:

答案 0 :(得分:1)

createMrNobody()函数调用是同步的,当您从Firebase检索数据时,它的行为方式不同。

Firebase本质上是异步的,因此当您向它请求数据时,您必须等待在处理数据之前检索该数据。否则,处理代码将在Firebase准备好数据之前执行。

它与函数调用的SQL查询不同,整个过程是同步的。

不确定这是否有帮助,但这里有一个示例:假设我们有一个存储人员的数组,我们需要从Firebase填充它。

我们首先定义人类

class Person {
        var title: NSString?
        var aDescription: NSString?
    }

和存储人员的数组

var myArray = [Person]()

当您准备从Firebase加载它们时,就会这样做

func loadMyPeople() {

    myUsersRef.observeSingleEventOfType(.Value, withBlock: { snapshot in

        for child in snapshot.children {
            let title = child.value["title"] as! String
            let description = child.value["description"] as! String
            let dude = Person()
            dude.title = title
            dude.aDescription = description
            self.myArray.append(dude)
        }

        //after all your people are loaded in the array, print it's contents
        // you could also reload a tableView here as well.
        for dude in self.myArray {
            print("email: \(dude.title!)  desc: \(dude.description!)")
        }
    })
}