为什么字典类型不能[String: Encodable]()
转换为 Encodable?
let dictionary = [String: Encodable]()
let test = dictionary is Encodable //Returns false
但是字典[String: String]()
确实有效
let dictionaryTwo = [String: String]()
let test = dictionaryTwo is Encodable //Returns true
to的条件符合
Dictionary
Encodable
如下所示:在英语中,这意味着 a
Dictionary
是Encodable
当其Key
和Value
types 各自符合 的类型时Encodable
。然而,
[String: Encodable]
(也拼写为[String: any Encodable]
)不是这样的类型,因为any Encodable
它本身不是可以符合的类型- 它是拼写类型约束Encodable
的一种方式,而不是类型本身。有关更多信息,请参阅其他问题,例如协议不符合自身?
Encodable
是一个协议,而协议本身并不符合。这是第一个问题。从更具体的层面来看,问题在于,一组对象并不Encodable
意味着它们可以以相同的方式进行编码。[String:String]
提供了足够的信息,因此,因为键和值是Encodable
,所以字典是 。这是一个说明为什么[String:Encodable]()
不能符合的示例。假设我有
Foo
和Bar
:现在我有了我的字典:
我们有一个字典,其中的键和值都是
Encodable
. 但如果你看一下,dictionary["fooExample"]
就会发现dictionary["barExample"]
编码完全不同。因此,即使值可以单独编码,但这并不意味着具有这些值的字典可以编码。