1
我目前正在從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 },所以它在塊被分配之前被調用 – Jad
'observeEventType'異步工作,這意味着完成塊在'viewDidLoad'完成後調用。將要執行的代碼放在塊中的完成塊外面,然後完成。 – vadian