我得到了一個帶有函式的類,該函式獲取用于在視圖上列印的用戶名。它有效,但我在沒有看到用戶名的情況下延遲了近一秒。
這里的類:
class ViewModel: ObservableObject {
@Published var username: String = ""
func benutzerdaten_accountview (email: String) -> String {
let db = Firestore.firestore()
let docRef = db.collection("Nutzer").document(email)
docRef.getDocument{ (document, error) in
if let document = document, document.exists{
self.username = (document.data()!["username"] as? String)!
}
}
return username
}
}
這就是我在視圖上列印它的方式:
struct AccountView: View{
@ObservedObject var model = ViewModel()
@Binding var tabSelection: Int
var email: String = (Auth.auth().currentUser?.email)!
var body: some View {
VStack{
Text("Hallo, \(model.benutzerdaten_accountview(email: email).description)")
...
uj5u.com熱心網友回復:
在 中benutzerdaten_accountview(),您無法回傳,username因為它尚未設定。用戶名在異步閉包中設定。
您已經在回呼閉包中進行了設定username,這很好。您現在需要做的只是呼叫該方法,onAppear(perform:)以便在AccountView加載時立即顯示。
當username視圖準備好時,更改將發布更新以再次更新視圖。從 API 獲取資料可能需要時間,尤其是在冷啟動時。
首先,洗掉該方法中的return和 回傳型別benutzerdaten_accountview()。這不再需要了。其余代碼:
struct AccountView: View {
@ObservedObject var model = ViewModel()
@Binding var tabSelection: Int
var email: String = (Auth.auth().currentUser?.email)!
var body: some View {
VStack {
Text("Hallo, \(model.username)")
}
.onAppear {
model.benutzerdaten_accountview(email: email)
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/394271.html
標籤:迅速 火力基地 谷歌云firestore 迅捷
