【发布时间】:2019-05-07 07:28:40
【问题描述】:
swift4 的Codable 协议非常有用。如果正确定义了构象,它会提供默认的实现函数。
例如这完全没问题:
struct Good: Codable {
var foo: String // Non-optional
var bar: Int? // Optional
}
但这会引发编译错误,要求创建符合协议的协议
struct Bad: Codable {
var foo: UIButton // Non-optional raise compile error for not conforming Codable Protocol
var bar: UIView? // optional is okay (not compile error because when decode failed, it fallback to nil)
var codable: SomeCodable // if the property is also Codable, then it's fine too!
}
那么,问题是:我能否编写一个协议,要求其遵循自身的一致性(就像属性需要遵循相同的协议)?
如果是,怎么做?如果不是,为什么?
另外,我还想知道在结构中定义CodingKeys 可以如何改变编码/解码行为?我也可以在我的协议中做类似的事情吗?
【问题讨论】:
-
规则之类的?不清楚您的意思,例如 UIButton 和 UIView 的“规则”是什么?
-
可选的还可以,不,不是的。这不是可选的问题,而是协议一致性的问题。
UIButton和UIView之类的视图本身并不符合Codable,因为对抽象视图进行编码/解码是没有意义的。 -
Codable 一致性的自动综合需要编译器的支持。所以不,你不能自己做类似的事情(除非你修补编译器)。
-
我更新了这个问题,让 Joakim 和 vadian 更清楚。谢谢马丁,你可以写一个关于编译器的简短答案,我很乐意接受这个答案。另外,我希望你能解释一下
CodingKeys的工作原理。
标签: swift swift4 swift-protocols codable