完成处理程序没有被调用为假定的 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的主要内容,如果未能解决你的问题,请参考以下文章