如何使用 class return firebase 数据?

How to return firebase data using a class?

我有一个 UICollectionView,我在其中使用 class 填充数据。截至目前,我正在用虚拟数据填充它,如下面的代码所示。我试图用我的 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)
})

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

任何 help/direction 将不胜感激。

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

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

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

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

我们先定义人class

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