完成处理程序没有被调用为假定的 Swift

Posted

技术标签:

【中文标题】完成处理程序没有被调用为假定的 Swift【英文标题】:completion handler does not get called as supposed Swift 【发布时间】:2016-08-10 21:10:50 【问题描述】:

我正在尝试从完成处理程序中获取 uid,以便我可以构建路径并从我的 Firebase 数据库中检索一些项目,但在调用 dbRef 时,myuserLogged 的计算结果为 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】:

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

【讨论】:

所以基本上它以这种方式工作:当 addAuthStateDidChangeListener 从数据库中获取信息并填充 auth 和用户变量时,代码继续执行到 dbRef 并且一旦 addAuthStateDidChangeListener 完成其任务,它将继续执行in 之后的代码。我想我明白了。

以上是关于完成处理程序没有被调用为假定的 Swift的主要内容,如果未能解决你的问题,请参考以下文章

使用完成处理程序在 Swift 中调用连续动画

如何在 API 调用中设置完成处理程序 - Swift 5

为链式函数使用 Swift 完成处理程序

如何存储闭包完成处理程序以供以后调用?

第二次调用函数时未调用 Swift 完成处理程序

从 Timer 选择器函数 Swift 调用函数的完成处理程序