【发布时间】:2019-07-07 03:04:15
【问题描述】:
我正在创建我的第一个应用程序(以及 swift 中的新手)。当我从 Facebook 登录时,姓名和电子邮件保存在 Firestore 中。我正在尝试将 facebook 中的名称设置为变量以在其他地方使用它,但我无法分配值,始终在控制台中显示“nil”。谁能帮帮我?
- 我设置了变量
var userN: String?
- 我从 Firestore 获取数据
func readDatabase(){
let db = Firestore.firestore()
let docRef = db.collection("users").document("email")
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
print("Document data: \(dataDescription)")
let data = document.data()
let userName = data!["name"]! as! String
print(userName)
let userEmail = data!["email"]! as! String
print(userEmail)
let containerController = ContainerController()
let containerController.userN = userName;
return
}
}
}
我想分配userN = userName,以便在其他视图中使用它
我怎样才能做到这一点?谢谢
【问题讨论】:
-
欢迎来到 SO,有几件事。首先,将其他用户信息存储在 Firestore 中的 /users 集合中,但使用用户 uid 作为 documentId,而不是电子邮件。将 documentId 与其包含的数据分离通常是最佳实践,特别是如果您要使用的 id 是动态的(可能会更改),例如电子邮件地址; uid 是静态的。接下来是Firestore is asynchronous,请仔细阅读;你不应该同步调用它并尝试返回一个值。
-
另外,document.data().map(String.init(describing:)) ??读取 Firestore 中的字段不需要“nil”。这就是它在文档中的显示方式,但我认为您在上下文中使用它(并且该文档不是很清楚 IMO)。如果您可以包含对您的 Firestore 结构的描述,我将向您展示如何做到这一点。
-
您好,感谢您的建议。好吧,我正在使用电子邮件,因为我正在测试 firebase 连接,但将来我将使用你所说的 uid。我正在使用 document.data() 因为 firebase 助手说,我是新手。我的 Firestore 的结构有一个“用户”集合,在其中,我有字段设备、用户名、电子邮件和照片 url,从谷歌或 Facebook 登录中检索。我只想在变量中设置这个字段,以便在我的菜单视图中使用它,并显示登录用户的信息。
标签: swift firebase variables google-cloud-firestore variable-assignment