首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将Array<Codable>转换为可编码

无法将Array<Codable>转换为可编码
EN

Stack Overflow用户
提问于 2018-10-21 20:06:24
回答 1查看 825关注 0票数 1

考虑到Array符合Codable,我假设Codable数组即[Codable]应该明确地传递给Codable

我用Decodable部分做了一个简单的例子。为了证实:

代码语言:javascript
复制
// Attempt to conform Array to Decodable
extension Array : Decodable { }

这会引起警告:

“Array”对协议“可解码”的一致性与类型的模块'Swift‘中所述的冲突将被忽略;即使有不同的条件界限,也不能有多个一致性

这是有意义的,因为Array已经符合Decodable了。

代码语言:javascript
复制
// Totally decodable array
var array: [Decodable] = ["Decodable", "strings"]

// Attempt to cast the decodable array
var decodable: Decodable = array

这会导致编译器错误:

类型可解码值不符合指定类型“可解码”。

和一个FixIt:Insert 'as! Decodable'

应用FixIt会导致运行时错误:

无法将“Swift.Array”(0x11f84dd08)类型的值转换为“Swift.Decodable”类型(0x11f84db18)。

我在macOS 10.14上使用Xcode 10。

那我在这里做错什么了?

我刚刚尝试了Xcode 9.2,同样的例子也很好。因此,问题是为什么Xcode 10不再起作用了,我应该做些什么呢?我在任何地方都找不到关于这个变化的任何参考资料。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-21 23:06:38

根据Swift 4.2中生效的条件一致性定律:

( Swift 4.2之前发生的事情是,条件一致性不存在,我们只是得到了一种通用的传递;您可以将任何数组视为可解码的,如果您错了,直到运行时才会遇到问题。现在,有了条件一致性,编译器实际上会查看元素类型。)

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

https://stackoverflow.com/questions/52919391

复制
相关文章

相似问题

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