如何解决将 @DocumentID 与自定义 `Codable` 实现一起使用不会填充 @DocumentID 变量
我已经创建了这样的结构:
struct TestObject: Codable {
public enum CodingKeys: String,CodingKey {
case ref = "r"
case string = "s"
}
@DocumentID
public var ref: DocumentReference?
public var string: String
public init(string: String) {
ref = nil
self.string = string
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
ref = try container.decodeIfPresent(DocumentReference.self,forKey: .ref)
string = try container.decode(String.self,forKey: .string)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(ref,forKey: .ref)
try container.encode(string,forKey: .string)
}
}
如果我随后将对象保存到 Firestore 并在快照侦听器中接收它,则 .ref
为 nil
:
self.firestore.collection("test").addSnapshotListener { (snapshot,error) in
if let snapshot = snapshot,let document = snapshot.documents.first
{
let testObject = try! document.data(as: TestObject.self)!
XCTAssertNotNil(testObject.ref) // <-- this is `nil`,but `document.documentID` is populated
}
}
是的 - 我已经验证 document.documentID
实际上已设置为快照。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。