【发布时间】:2016-08-21 17:53:51
【问题描述】:
我目前正在从 firebase 检索数据,数据被放入 NSObject 然后是完成块。完成块内的项目存储为变量userBinfos。变量userBinfos 仅在完成块内工作我想在完成之外使用它
var userBinfos = userObject()
override func viewDidLoad() {
super.viewDidLoad()
userBinfo { (user) in
self.userBinfos = user
}
//I want to use to variable here but it does not work
print(self.userBinfos.email)
}
func userBinfo(completion: (userObject) -> ()) {
let dbFir = FIRDatabase.database().reference()
let firRef = dbFir.child("frontEnd/users/\(userId)")
firRef.observeEventType(.Value, withBlock: { snapshot in
let userDict = snapshot.value as! [String: AnyObject]
self.name.text = userDict["firstname"] as? String
self.userBio.text = userDict["userBio"] as! String
var user = userObject()
user.firstName = userDict["firstname"]
user.lastName = userDict["lastname"]
user.email = userDict["email"]
user.profileImageUrl = userDict["profileImageUrl"]
user.userBio = userDict["firstname"]
user.userId = userDict["firstname"]
dispatch_async(dispatch_get_main_queue(), {
completion(user)
})
}) { (error) in
print(error)
}
}
【问题讨论】:
-
你在块外调用 print(self.userBinfos.email) !!把它放在里面: userBinfo { (user) in } 所以它在被块分配之前被调用
-
observeEventType异步工作,这意味着在viewDidLoad完成后稍后调用完成块。把你要执行的代码放到block里面的completion block外面就完成了。
标签: swift firebase firebase-realtime-database