【发布时间】:2020-02-12 05:21:52
【问题描述】:
尝试重构一些遗留的 JSON 解析代码以使用 Codable 并尝试重用现有的 Swift 结构,为简单起见,请考虑以下 JSON:
{
"dateOfBirth":"2016-05-19"
...
"discountOffer":[
{
"discountName":"Discount1"
...
},
{
"discountName":"Discount2"
...
}
]
}
在遗留代码中,Swift 结构 Discount 有一个属性“discountType”,其值是根据从 JSON 获得的 Member 结构的“dateOfBirth”计算得出的,问题是,我如何将 Member 的 dateOfBirth 传递给每个折扣结构?或者有没有办法让层次结构中较低的结构访问层次结构中较高的结构?
struct Member: Codable {
var dateOfBirth: Date?
var discounts: [Discount]?
}
struct Discount: Codable {
var discountName: String?
var memberDateOfBirth: Date? // *** Need to get it from Member but how?
var discountType: String? // *** Will be determined by Member's dateOfBirth
public init(from decoder: Decoder) throws {
// self.memberDateOfBirth = // *** How to set from Member's dateOfBirth?????
// use self.memberDateOfBirth to determine discountType
...
}
}
我无法将解码器的 userInfo 用作其获取属性。我曾想过在某处将 dateOfBirth 设置为静态变量,但听起来像个杂牌。
不胜感激。谢谢。
【问题讨论】:
-
Discount 的 memberDateOfBirth 在折扣的 JSON 中不可用,我正在尝试使用会员的 dateOfBirth 设置它,我还需要为代码中未显示的其他自定义覆盖 Init
标签: swift struct hierarchy decodable