我和Swift 4和Codable
玩了一会儿,遇到了一些有嵌套协议的场景,这些协议都符合Codable
。
简化示例如下所示:
protocol CodableSomething: Codable {}
protocol CodableAnotherThing: Codable {
var something: CodableSomething { get }
}
struct Model: CodableAnotherThing {
var something: CodableSomething
}
这段代码正在使用Xcode 9 Beta 5生成错误:
现在,我并没有预料到这些错误,因为我知道这些协议的一致性将由编译器自动生成,而事实上,我甚至无法在没有生成错误的情况下手动实现这些一致性。我也尝试过几种不同的方法来使用Codable
来解决这种嵌套的模型结构,但是我无法使它工作起来。
我的问题:这是一个编译器错误(它仍然是测试版)还是我做错了什么?
发布于 2018-09-16 13:50:22
如果你换了协议
CodableSomething
对于一个结构,你不会有错误,
更进一步,阅读更多关于可编码的内容。
可编码的可以使用哪些类型?为什么?在上面,你基本上是在对xCode说这个
struct foo: Codable {
var ok: Codable
}
这是不对的--仔细看看它,Codable
是一个Typealias
,您需要遵守它才能使用它的子类,例如.Decode()
,.Encode()
--这些方法与值而不是抽象类型一起工作,因此将Codable
类型赋予一个无法计算的变量。因为Codable
是一个指示Decodable
和Encodable
的typealias
/// A type that can convert itself into and out of an external representation.
public typealias Codable = Decodable & Encodable
可解码和可编码都是确保这些值是可编码和可解码的协议。
因此,可编码是一种抽象,它不能解码或编码它的自身类型的变量,但是可以对其确认的类型进行编码和解码。
https://stackoverflow.com/questions/45723330
复制相似问题