Zac*_*iro 3 firebase swift google-cloud-firestore
我有一个简单的User类,其中包含以下字段:
{
"localIdentifier": "xyc9870",
"isOnline": false,
"username": "ZS"
}
Run Code Online (Sandbox Code Playgroud)
我想使用Swift Decodable轻松将QueryDocumentSnapshot变成类型安全的Swift结构。我也想确保我得到了documentID从 QueryDocumentSnapshot供以后更新的对象。
这是我目前用于解码的内容,但是显然它错过了 documentId
struct User: Decodable {
let localIdentifier: String
let username: String
let isOnline: Bool
}
Run Code Online (Sandbox Code Playgroud)
会喜欢这里的手。谢谢!
我为自己编写了一个小的便捷扩展,将其documentID引入了dataJSON,然后可以使用struct下面的简单代码
extension QueryDocumentSnapshot {
func prepareForDecoding() -> [String: Any] {
var data = self.data()
data["documentId"] = self.documentID
return data
}
}
Run Code Online (Sandbox Code Playgroud)
解码使用:
struct User: Decodable {
let documentId: String
let localIdentifier: String
let username: String
let isOnline: Bool
}
if let user = try? JSONDecoder().decode(User.self, fromJSONObject: doc.prepareForDecoding()) {
...
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我的JSONDecoder延伸
extension JSONDecoder {
func decode<T>(_ type: T.Type, fromJSONObject object: Any) throws -> T where T: Decodable {
return try decode(T.self, from: try JSONSerialization.data(withJSONObject: object, options: []))
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |