我已经在我的应用程序上成功设置了Firebase Phone Auth。
在我的家中,当用户登录时,我检索其特定的uid来创建一个以其uid命名的Firestore文档,以添加有关该用户的更多信息。 我为每个用户添加一个“点”字段。
我正在尝试获取该特定的“点”字段值。
有人可以帮我解释一下解决方案吗?我已经知道,我们不能仅使用firestore get请求获取字段值,但找不到用于存储“点”值以显示给用户的解决方案。
非常感谢。
如果需要,这是我的代码:
import SwiftUI
import Firebase
func getUID() -> String {
let user = Auth.auth().currentUser
if let user = user {
return user.uid
}
return "Can't fetch user data."
}
struct HomeView: View {
let uid = getUID()
let db = Firestore.firestore()
var body: some View {
VStack {
Text("User id = \(uid)")
.font(.headline)
.onAppear {
self.db.collection("users").document(self.uid).setData([
"points" : 2
])
}
Button(action: {
let docRef = self.db.collection("users").document(self.uid)
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let dataDescription = document.data()
print(dataDescription)
} else {
print("Document \(document) does not exist")
}
}
}) {
Text("See my points")
}
Button(action: {
try! Auth.auth().signOut()
UserDefaults.standard.set(false, forKey: "status")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "statusChange"), object: nil)
}) {
Text("Logout")
}
}
}
}
struct HomeView_Previews: PreviewProvider {
static var previews: some View {
HomeView()
}
}
答案 0 :(得分:2)
有两种方法可以访问Firestore文档中的特定字段:
data()
方法返回将String
映射到Any
的字典。您可以像这样读取属性:let data = queryDocumentSnapshot.data()
let title = data["title"] as? String ?? ""
let author = data["author"] as? String ?? ""
let numberOfPages = data["pages"] as? Int ?? 0
let book = try? queryDocumentSnapshot.data(as: Book.self)
我建议将任何数据访问代码提取到视图模型或商店中。我链接的文章显示了如何执行此操作。这将使您的代码更易于阅读,更不易出错且更易于维护。