gpt4 book ai didi

swift - RealmSwift LinkingObjects 和 Decodable

转载 作者:行者123 更新时间:2023-11-28 10:32:24 25 4
gpt4 key购买 nike

我有一个 Realm 模型类,我需要它是可解码的,这样我就可以从 JSON 序列化它并将它保存到数据库中。每个PortfolioItem与一个 Product 相关联在某些时候我需要去 PortfolioItem来自 Product通过反向关系。这就是为什么我有 LinkingObjects属性(property)。问题是当我尝试遵守 Decodable 时协议(protocol)。编译器给我一个错误 Cannot automatically synthesize 'Decodable' because 'LinkingObjects<PortfolioItem>' does not conform to 'Decodable' .如何处理?我在网上几乎找不到关于 LinkingObjects 和 Decodable 的信息,我也不知道如何处理。

class PortfolioItem: Object {

@objc dynamic var id: String = ""
@objc dynamic var productId: String = ""

@objc dynamic public var product: Product?

convenience init(id: String, productId: String) {
self.init()
self.id = id
}

}

final class Product: Object, Decodable {

@objc dynamic var id: String = ""
@objc dynamic var name: String = ""

private let portfolioItems = LinkingObjects(fromType: PortfolioItem.self, property: "product")

public var portfolioItem: PortfolioItem? {
return portfolioItems.first
}

convenience init(id: String, name: String) {
self.init()
self.id = id
}
}

非常感谢 Chris Shaw 帮助我解决了这个问题。我写了一篇更深入的文章如何设置 Decodable 和 LinkingObjects,look HERE .

最佳答案

嗯,除非我遗漏了什么,否则 LinkingObjects 属性不需要包含在解码中。

我这里的假设是您从一些在线来源接收 JSON,其中 Product 的 JSON 由 { id: "", name: ""} 组成。只要您使用关联的 Product 正确创建 PortfolioItem,那么生成的 LinkingObjects 属性就是 Realm 中动态查询的结果(因此将在没有任何 JSON 源的情况下工作。

我今天无法测试编译答案,但您应该能够使用 CodingKeys 简单地排除该属性,即将其添加到 Product:-

private enum CodingKeys: String, CodingKey {
case id
case name
}

此外,无关紧要,但请注意,您的convenience init 函数并未初始化您传入的所有属性。

关于swift - RealmSwift LinkingObjects 和 Decodable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55384960/

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