首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Swift 4的嵌套可编码协议

使用Swift 4的嵌套可编码协议
EN

Stack Overflow用户
提问于 2017-08-16 21:32:08
回答 1查看 2K关注 0票数 7

我和Swift 4和Codable玩了一会儿,遇到了一些有嵌套协议的场景,这些协议都符合Codable

简化示例如下所示:

代码语言:javascript
运行
复制
protocol CodableSomething: Codable {}

protocol CodableAnotherThing: Codable {
    var something: CodableSomething { get }
}

struct Model: CodableAnotherThing {
    var something: CodableSomething
}

这段代码正在使用Xcode 9 Beta 5生成错误:

  • 类型“模型”不符合协议“可解码”
  • 类型“模型”不符合协议“可编码”

现在,我并没有预料到这些错误,因为我知道这些协议的一致性将由编译器自动生成,而事实上,我甚至无法在没有生成错误的情况下手动实现这些一致性。我也尝试过几种不同的方法来使用Codable来解决这种嵌套的模型结构,但是我无法使它工作起来。

我的问题:这是一个编译器错误(它仍然是测试版)还是我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-09-16 13:50:22

如果你换了协议

CodableSomething

对于一个结构,你不会有错误,

更进一步,阅读更多关于可编码的内容。

可编码的可以使用哪些类型?为什么?在上面,你基本上是在对xCode说这个

代码语言:javascript
运行
复制
struct foo: Codable {
    var ok: Codable
}

这是不对的--仔细看看它,Codable是一个Typealias,您需要遵守它才能使用它的子类,例如.Decode().Encode() --这些方法与值而不是抽象类型一起工作,因此将Codable类型赋予一个无法计算的变量。因为Codable是一个指示DecodableEncodabletypealias

代码语言:javascript
运行
复制
/// A type that can convert itself into and out of an external representation.
public typealias Codable = Decodable & Encodable

可解码和可编码都是确保这些值是可编码和可解码的协议。

因此,可编码是一种抽象,它不能解码或编码它的自身类型的变量,但是可以对其确认的类型进行编码和解码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45723330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档