完成处理程序不会被称为Swift

时间:2016-08-10 21:10:50

标签: swift closures completionhandler

我正在尝试从完成处理程序中获取uid,以便我可以构建一个路径并从我的Firebase数据库中检索一些项目,但myuserLoggeddbRef被调用时计算为nill。

我的问题是我的完成处理程序是在dbRef被调用之后调用的,而不是相反。 我认为我的代码将在行中执行,1。FIRAuth.auth()?....,2. dbRef = FIRDatabase ....

override func viewDidLoad() {
    super.viewDidLoad()

    FIRAuth.auth()?.addAuthStateDidChangeListener({ (auth:FIRAuth,     user:FIRUser?) in
        if let userSignedIn = user {

            self.myuserLogged = userSignedIn.uid
            print("Welcome buddy \(self.myuserLogged)")

        }
    })
 print("brother \(self.myuserLogged)")

    dbRef = FIRDatabase.database().reference().child("Users/\(myuserLogged)")
    startObservingDB()
}

1 个答案:

答案 0 :(得分:1)

完成处理程序是异步处理的,因为操作可能需要一些时间。如果之后需要dbRef,则需要将其放入完成处理程序。