gpt4 book ai didi

swift - void 函数中意外的非 void 返回值 - Swift

转载 作者:行者123 更新时间:2023-12-04 15:29:54 25 4
gpt4 key购买 nike

不让我返回用户名值,因为它在闭包中。有人可以向我解释如何使用@escaping 和 void 闭包

错误:void 函数中出现意外的非 void 返回值

func grabUsername () -> String {
let uid = Auth.auth().currentUser?.uid
let database = Firestore.firestore().collection("Users").document(uid!)
database.getDocument { (docSnapshot, error) in
guard let docSnapshot = docSnapshot, docSnapshot.exists else {return}
let mydata = docSnapshot.data()
let username = mydata!["Username"] as? String ?? ""
return username
}
}

最佳答案

getDocument 是异步方法,回调闭包没有返回值,所以你不能从它返回,相反你必须在某处应用结果,例如。在属性(property)中

所以解决方案可以如下

var username: String = ""

// ... other your code

func grabUsername () { // << async, no immediate return
let uid = Auth.auth().currentUser?.uid
let database = Firestore.firestore().collection("Users").document(uid!)
database.getDocument { (docSnapshot, error) in
guard let docSnapshot = docSnapshot, docSnapshot.exists else {return}
let mydata = docSnapshot.data()
let username = mydata!["Username"] as? String ?? ""

DispatchQueue.main.async {
self.username = username // << store result
}
}
}

关于swift - void 函数中意外的非 void 返回值 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61436167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com