【发布时间】:2017-11-23 03:29:34
【问题描述】:
Swift 的Encodable/Decodable 协议与 Swift 4 一起发布,使 JSON(反)序列化非常愉快。但是,我还没有找到一种方法来细粒度地控制哪些属性应该被编码,哪些应该被解码。
我注意到从随附的CodingKeys 枚举中排除该属性会完全将该属性排除在进程之外,但是有没有办法进行更细粒度的控制?
【问题讨论】:
-
你是说你有一些你想编码的属性,但你想解码不同的属性? (即您希望您的类型不是可往返的?)因为如果您只关心排除该属性,则给它一个默认值并将其排除在
CodingKeys枚举之外就足够了。 -
无论如何,您始终可以手动实现
Codable协议(init(from:)和encode(to:))的要求,以完全控制流程。 -
我的具体用例是避免给解码器过多的控制权,这可能导致通过覆盖内部属性值远程获取 JSON。下面的解决方案就足够了!
-
我希望看到一个答案/新的 Swift 功能,它只需要处理特殊情况和排除的键,而不是重新实现您通常应该免费获得的所有属性。跨度>