我稍微玩了一下Swift 4和Codable
,陷入了一些嵌套协议(protocol)都符合Codable
的场景。
简化的示例如下所示:
protocol CodableSomething: Codable {}
protocol CodableAnotherThing: Codable {
var something: CodableSomething { get }
}
struct Model: CodableAnotherThing {
var something: CodableSomething
}
This code使用Xcode 9 Beta 5产生了构建错误:
现在,我没想到会出现这些错误,因为我了解到这些协议(protocol)的一致性将由编译器自动生成,而实际上,我什至无法在没有构建错误的情况下手动实现此一致性。我还尝试了几种不同的方法来使用
Codable
解决这种嵌套模型结构,但是我无法使其正常工作。我的问题:这是编译器错误(仍为beta)还是我做错了什么?
最佳答案
如果切换协议(protocol)
对于一个结构体,您不会有任何错误,
进一步了解有关的更多信息可编码的
可编码可以使用的类型是什么?为什么?
在那里,您基本上是对xCode讲这个
struct foo: Codable {
var ok: Codable
}
那是不对的,请深入了解一下,
Codable
是Typealias
您需要遵循才能使用其子项,例如.Decode()
,.Encode()
这些方法适用于值而不是抽象类型所以给一个
Codable
类型给一个变量是不可能的。因为
Codable
是一个typealias
,它指示Decodable
和Encodable
/// A type that can convert itself into and out of an external representation.
public typealias Codable = Decodable & Encodable
Decodable和Encodable都是确保这些值可编码和可解码的协议(protocol)。
所以Codable是一个抽象,它不能对自身类型的变量进行解码或编码
但可以对已确认的类型进行编码和解码。
关于swift4 - Swift 4的嵌套可编码协议(protocol),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45723330/