等待功能Swift/SwiftUI
我是swift和SwiftUI的新手,我有一个大问题,我希望有人能帮助我。事实上,我有一个函数,我使用了对firebase Db的调用,但函数在firebase响应之前结束。那么,有什么方法可以像swift中的等待一样呢?我试着自己去寻找,但我尝试的一切都不起作用 我放了一个代码示例,它可能会更清晰 扩展会话存储{ func校验参考码{ 让docRef=db.documentuser.referedby docRef.getDocument{document,文件中有错误 如果let document=document,则存在document{ 让otherUser=self.changeReferralUserInformationdataDescription:文档 docRef.setDataotherUser self.user.moneyBalance=1 回来 }否则{ printNo转介代码 self.firestorerror=referralCode\u未验证 self.user.referedby= 回来 } } } 功能说明信息{ 如果self.user.referedby!={ self.checkReferralCode 如果self.firestorerror=={ /*它总是以这种方式运行,但在FireStore错误更改后1秒*/ 打印开始上载 自我决定型 }否则{ 回来 } } } 输出将是: $>开始上传 $>无转介代码等待功能Swift/SwiftUI,swift,async-await,swiftui,Swift,Async Await,Swiftui,我是swift和SwiftUI的新手,我有一个大问题,我希望有人能帮助我。事实上,我有一个函数,我使用了对firebase Db的调用,但函数在firebase响应之前结束。那么,有什么方法可以像swift中的等待一样呢?我试着自己去寻找,但我尝试的一切都不起作用 我放了一个代码示例,它可能会更清晰 扩展会话存储{ func校验参考码{ 让docRef=db.documentuser.referedby docRef.getDocument{document,文件中有错误 如果let docum
将docRef设置为类的变量,而不是局部变量,如下所示:
class WhateverClassNameYouHave: InheritedClass {
let docRef : DocRef (whatever type it is)
func checkCode() {
self.docRef = /* get firebase doc */
/* Call to firebase function */
docRef.getDocument { (document, error) in
/* Do my stuff*/
} else {
/*change variable to error*/
self.firestoreError = "referralCode_unvalid"
}
}
/*But the fonction end before the response of firebase so my self.firestoreError isn't update */
}
我发现了一个使用信号量的答案,这里是教程的链接 这是密码
func checkReferralCode(semaphore: DispatchSemaphore){
let docRef = self.db.document(self.user.referredBy)
semaphore.wait()
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let otherUser = self.changeReferralUserInformation(dataDescription: document)
docRef.setData(otherUser)
self.user.moneyBalance = 1
semaphore.signal()
} else {
self.firestoreError = "referralCode_unvalid"
self.user.referredBy = ""
semaphore.signal()
}
}
}
func doInscriptionInformation() {
let semaphore = DispatchSemaphore(value: 1)
DispatchQueue.global(qos: .userInteractive).async {
if (self.user.referredBy != "") {
self.checkReferralCode(semaphore: semaphore)
semaphore.wait()
if (self.firestoreError == "" ) {
self.determineUploadType()
}
else {
print("No good referral code")
}
semaphore.signal()
}
}
}
希望能帮助他人这是否回答了您的问题?如果您打印错误,在您将其更改为我的建议后,错误说明了什么?您声明docref的类是否仍然存在?向我们展示您的所有代码,以便我们可以帮助您。仅这几行代码没有说明任何内容…抱歉@Chris,我将整个code@CameronLittle我正在检查这不是全部代码-这只是一个扩展;向我们展示一个可编译的可运行示例…请看-顺便说一句,您没有做,我对您的变量提出的建议。。。