微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 @DocumentID 与自定义 `Codable` 实现一起使用不会填充 @DocumentID 变量

如何解决将 @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 并在快照侦听器中接收它,则 .refnil

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 举报,一经查实,本站将立刻删除。