如何使用 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!)")
}
})
}
我有一个 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!)")
}
})
}