1
現在、firebaseからデータを取得していますが、データはNSObject
に格納され、その後に完了ブロックに格納されます。完了ブロック内の項目は変数userBinfos
として格納されます。 userBinfos
のみ完了ブロックの内部で作業変数iが完了完成ブロック外の変数を使用
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)を呼び出すとします。それはブロックによって割り当てられる前に呼び出されています。 – Jad
'observeEventType'は非同期に動作します。これは、' viewDidLoad'が完了した後で完了ブロックが後で呼び出されることを意味します。実行したいコードをブロック内の完了ブロックの外に置き、完了します。 – vadian