【发布时间】:2019-06-07 09:43:29
【问题描述】:
我正在尝试将从我的 Firestore 数据库中检索到的“用户”映射到我在代码中定义的用户结构,但我认为我没有正确理解 swift 中的映射功能。
如何将检索到的用户映射到结构中?
结构
struct User {
// Properties
var firstName: String
var lastName: String
var userName: String
var email: String
init(firstName: String, lastName: String, userName: String, email: String) {
self.firstName = firstName
self.lastName = lastName
self.userName = userName
self.email = email
}
}
从 Firestore 获取用户的函数
func getUser(UID: String) {
// Firebase setup
settings.areTimestampsInSnapshotsEnabled = true
db.settings = settings
db.collection("users").document(UID).getDocument { (document, error) in
if let error = error {
print("Error: \(error.localizedDescription)")
} else {
print(document!.data()!)
}
}
}
【问题讨论】:
-
不相关,但您在
User结构中提供的init是不必要的。您将自动获得相同的init,而无需自己编写。 -
哦,谢谢你的提示!我没有意识到它是自动的。您是否碰巧知道如何通过@rmaddy 进行这种映射?
-
该解决方案绝对有效!但是有没有办法使用 swift 中的映射功能来做到这一点?我计划构建的一些数据库模型会更大更复杂。我也只是想学习如何使用这些功能以供将来参考@emrepun
-
你可能想让你的结构符合
Codable协议(Encodable & Decodable)。如果您的结构只是字符串,则您无需实现任何东西,只需符合该协议即可完成,否则,如果您的User结构中有子对象,您将不得不编写自己的解析。有了这个,您可以使用快照中的字典来构建User。
标签: ios swift firebase google-cloud-firestore mapping