考虑到Array符合Codable,我假设Codable数组即[Codable]应该明确地传递给Codable。
我用Decodable部分做了一个简单的例子。为了证实:
// Attempt to conform Array to Decodable
extension Array : Decodable { }这会引起警告:
“Array”对协议“可解码”的一致性与类型的模块'Swift‘中所述的冲突将被忽略;即使有不同的条件界限,也不能有多个一致性
这是有意义的,因为Array已经符合Decodable了。
// 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不再起作用了,我应该做些什么呢?我在任何地方都找不到关于这个变化的任何参考资料。
发布于 2018-10-21 23:06:38
根据Swift 4.2中生效的条件一致性定律:
( Swift 4.2之前发生的事情是,条件一致性不存在,我们只是得到了一种通用的传递;您可以将任何数组视为可解码的,如果您错了,直到运行时才会遇到问题。现在,有了条件一致性,编译器实际上会查看元素类型。)
https://stackoverflow.com/questions/52919391
复制相似问题