功能在Closure完成Firebase之前返回

时间:2014-12-18 17:07:45

标签: ios swift firebase

我正在使用Firebase来存储数据,当我尝试使用它们的闭包功能检索数据时,总是在闭包完成之前完成并返回。在我的HeyUser类中,我试图在Firebase中的Friend键中获取值并将其存储在类属性中。但是,在尝试实例化类的对象时,实例化对象而不获取Friends键的值。我想知道你是否能够延迟实例化或完成一个函数,直到闭包完成。以下是我的HeyUser类的代码:

class HeyUser {
var Friends: [String] = [String]()
var username = PFUser.currentUser().username
var ref = Firebase()
var fRef = Firebase()

init() {
    self.ref = Firebase(url: "https://hey-chat.firebaseio.com/").childByAppendingPath("users").childByAppendingPath(PFUser.currentUser().username)
    self.fRef = self.ref.childByAppendingPath("friends")
    self.getFriends()
}

func getFriends() {
    self.fRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
        self.Friends = snapshot.value as [String]
        print("TEST")
        print(self.Friends.count)
        })
}

}

1 个答案:

答案 0 :(得分:1)

我不熟悉FireBase,并且仍然开始使用Swift,但我可以告诉你,这就是异步网络的工作原理。

你调用一个函数并传入一个块(闭包)。该函数立即返回,并且在将来的某个日期,当网络事务完成时,框架(在本例中为firebase)将调用您的closusure。

您必须改变使用此架构的想法。您编写代码以发送请求,然后进入“待机模式”,等待请求完成。