首页 > 解决方案 > 初始化没有数据的 DictionaryLiteral

问题描述

我想初始化一个没有任何数据的 Swift DictionaryLiteral 对象。

如:

var withoutData: DictionaryLiteral = [String: [RealmObject]]()

但是,这会产生错误Cannot convert value of type '[String : [RealmObject]]' to specified type 'DictionaryLiteral'

但是如果我直接对数据做同样的事情,它会起作用:

var withData: DictionaryLiteral = ["test": [RealmObject()]]

背后的原因是什么?以及如何声明一个空变量 DictionaryLiteral?

标签: swiftdictionary

解决方案


在您的第一个示例中,您正在创建 aDictionary然后尝试DictionaryLiteral用它初始化 a 。它们是两种不同的类型,因此会出现错误。您可以使用()来创建DictionaryLiteral,但您必须正确指定您正在创建的类型。ADictionaryLiteral使用 aString作为键并[RealmObject]作为值由 指定DictionaryLiteral<String, [RealmObject]>

在您的第二个示例中,您提供了一个实际的字典文字,因此 Swift 能够将类型推断为DictionaryLiteral<String, [RealmObject]>. Dictionary实际上没有被创造出来。

所以创建空的一种方法DictionaryLiteral是在创建时完全指定类型并让 Swift 推断变量类型:

var withoutData = DictionaryLiteral<String, [RealmObject]>()

另一种方法是完全指定变量的数据类型,然后使用空字典文字初始化变量,[:]JonJ 在他的答案中所示


推荐阅读