gpt4 book ai didi

arrays - 无法将 Array 转换为 Codable

转载 作者:行者123 更新时间:2023-11-28 11:43:43 27 4
gpt4 key购买 nike

鉴于 Array 符合 Codable 我假设 Codable 的数组,即 [Codable] 应该肯定可转换为 Codable

我已经用 Decodable 部分做了一个简单的例子。并且只是为了验证:

// Attempt to conform Array to Decodable
extension Array : Decodable { }

这会导致警告:

Conformance of 'Array' to protocol 'Decodable' conflicts with that stated in the type's module 'Swift' and will be ignored; there cannot be more than one conformance, even with different conditional bounds

这是有道理的,因为 Array 已经符合 Decodable

// Totally decodable array
var array: [Decodable] = ["Decodable", "strings"]

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

这会导致编译错误:

Value of type [Decodable] does not conform to specified type 'Decodable'

还有一个 FixIt:Insert 'as!可解码'

应用 FixIt 导致运行时错误:

Could not cast value of type 'Swift.Array<Swift.Decodable>' (0x11f84dd08) to 'Swift.Decodable' (0x11f84db18).

我在 macOS 10.14 上使用 Xcode 10。

那么我做错了什么?

我刚刚尝试使用 Xcode 9.2,同样的示例运行良好。所以问题变成了为什么这不再适用于 Xcode 10,我应该做什么呢?我在任何地方都找不到关于此更改的任何引用。

最佳答案

根据在 Swift 4.2 中生效的条件一致性法则:

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

关于arrays - 无法将 Array<Codable> 转换为 Codable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52919391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com