Jac*_*ley 1 ios firebase swift google-cloud-firestore
我目前正在尝试使用 Swift 5 中的 Firestore 创建用户数据库。
我创建了一个注册视图控制器,我正在关注 Firestore 文档(此链接),以便存储用户数据。
在常量文件中,我存储了以下代码。
struct userMap: Codable {
let firstName: String?
let lastName: String?
let email: String?
let profilePictureURL: String?
let UserIdentification: String?
enum CodingKeys: String, CodingKey {
case firstName
case lastName
case email
case profilePictureURL
case UserIdentification
}
}
Run Code Online (Sandbox Code Playgroud)
在我的注册视图控制器中,我有这个代码。
let user = Constants.userMap(firstName: firstName,
lastName: lastName,
email: email,
profilePictureURL: metaImageURL,
UserIdentification: docRefID)
do {
try dbRef.document(docRefID).setData(user)
} catch let error {
print("Error writing to Firestore: \(error)")
}
Run Code Online (Sandbox Code Playgroud)
在try dbRef.document(docRefID).setData(user)我收到错误消息时,“无法将类型 'Constants.userMap' 的值转换为预期的参数类型 '[String : Any]'”
我觉得值得补充的东西。在 firebase 文档中,它推荐了以下内容。
try dbRef.document(docRefID).setData(from: user)
Run Code Online (Sandbox Code Playgroud)
但是,我试过这个,这个也试过了,我只是被要求删除from:.
感谢你的帮助。
您正在使用结构的对象userMap而不是字典。您可以通过在userMap结构中创建一个字典并提供该字典作为参数来解决这个问题。由于您的结构已经符合Codable您可以Data从userMapusing 的对象创建JSONEncoder。然后,您可以将数据转换为 JSON 字典以用作参数。这里的代码:
struct userMap: Codable {
//...
var dictionary: [String: Any] {
let data = (try? JSONEncoder().encode(self)) ?? Data()
return (try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any]) ?? [:]
}
}
Run Code Online (Sandbox Code Playgroud)
而对于setData:
try dbRef.document(docRefID).setData(from: user.dictionary)
Run Code Online (Sandbox Code Playgroud)
注意:主要结构名称大写以保持一致性 因此,转换userMap为UserMap.
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |