gpt4 book ai didi

swift - 使用 Decodable 通过 Firestore 获取对象和文档 ID

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:27 25 4
gpt4 key购买 nike

我有一个简单的 User 类,它有以下字段:

{ 
"localIdentifier": "xyc9870",
"isOnline": false,
"username": "ZS"
}

我想使用 Swift 的 Decodable 轻松地将 QueryDocumentSnapshot 转换为类型安全的 Swift 结构。我还想确保从 QueryDocumentSnapshot 中获取 documentID,以便稍后更新对象。

这是我目前用来解码的,但显然它遗漏了 documentId

struct User: Decodable {

let localIdentifier: String
let username: String
let isOnline: Bool

}

很想在这里伸出援手。谢谢!

最佳答案

我自己写了一个小的便利扩展,它只是将 documentID 带入 data JSON,然后我可以使用下面的简单 struct

extension QueryDocumentSnapshot {

func prepareForDecoding() -> [String: Any] {
var data = self.data()
data["documentId"] = self.documentID

return data
}

}

解码使用:

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()) {
...
}

编辑:

我的 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: []))
}
}

关于swift - 使用 Decodable 通过 Firestore 获取对象和文档 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53341137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com