使用 Swift Codable 解码 firestore 文档时获取文档 ID
Getting document ID when decoding firestore document using Swift Codable
我正在使用 class 解码检索到的 firestore 文档,如果我不想操纵数据,它会按预期工作:
class Room: Identifiable, Codable {
@DocumentID public var id:String?
var name:String
}
但是,如果我尝试使用自己的 init 来设置值,我无法获取 firestore 文档 ID?
class Room: Identifiable, Codable {
@DocumentID public var id:String?
var name:String
enum Keys:String, CodingKey {
case name
case capacity
case photo = "url"
}
required init(from decoder: Decoder) throws {
// How do I get the document ID to set the id value?
let container = try decoder.container(keyedBy: Keys.self)
name = try container.decode(String.self, forKey: .name)
capacity = try container.decode(Int.self, forKey: .capacity)
photo = try container.decode(String.self, forKey: .photo)
// Do some more stuff here...
}
}
在其他地方找到了答案,这很有效。发帖给任何来到这里并有相同查询的人。
TL;DR -
使用以下代码解码 init 函数中的 DocumentReference:
ref = try container.decode(DocumentID<DocumentReference>.self, forKey: .ref)
.wrappedValue
更长的解释:
我不会假装 100% 理解这个,但这里有一个很好的解释 https://github.com/firebase/firebase-ios-sdk/issues/7242
我正在使用 class 解码检索到的 firestore 文档,如果我不想操纵数据,它会按预期工作:
class Room: Identifiable, Codable {
@DocumentID public var id:String?
var name:String
}
但是,如果我尝试使用自己的 init 来设置值,我无法获取 firestore 文档 ID?
class Room: Identifiable, Codable {
@DocumentID public var id:String?
var name:String
enum Keys:String, CodingKey {
case name
case capacity
case photo = "url"
}
required init(from decoder: Decoder) throws {
// How do I get the document ID to set the id value?
let container = try decoder.container(keyedBy: Keys.self)
name = try container.decode(String.self, forKey: .name)
capacity = try container.decode(Int.self, forKey: .capacity)
photo = try container.decode(String.self, forKey: .photo)
// Do some more stuff here...
}
}
在其他地方找到了答案,这很有效。发帖给任何来到这里并有相同查询的人。
TL;DR -
使用以下代码解码 init 函数中的 DocumentReference:
ref = try container.decode(DocumentID<DocumentReference>.self, forKey: .ref)
.wrappedValue
更长的解释: 我不会假装 100% 理解这个,但这里有一个很好的解释 https://github.com/firebase/firebase-ios-sdk/issues/7242