swift - 初始化没有数据的 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?
解决方案
在您的第一个示例中,您正在创建 aDictionary
然后尝试DictionaryLiteral
用它初始化 a 。它们是两种不同的类型,因此会出现错误。您可以使用()
来创建DictionaryLiteral
,但您必须正确指定您正在创建的类型。ADictionaryLiteral
使用 aString
作为键并[RealmObject]
作为值由 指定DictionaryLiteral<String, [RealmObject]>
。
在您的第二个示例中,您提供了一个实际的字典文字,因此 Swift 能够将类型推断为DictionaryLiteral<String, [RealmObject]>
. Dictionary
实际上没有被创造出来。
所以创建空的一种方法DictionaryLiteral
是在创建时完全指定类型并让 Swift 推断变量类型:
var withoutData = DictionaryLiteral<String, [RealmObject]>()
另一种方法是完全指定变量的数据类型,然后使用空字典文字初始化变量,[:]
如JonJ 在他的答案中所示。
推荐阅读
- powershell - URL 健康检查 PowerShell 脚本在大多数站点上正确获取 HTTP 200,但在某些站点上不正确的“0”状态代码...API 超时问题?
- c++ - 这个警告“指向算术中使用的函数的指针”是什么意思?
- arrays - 为什么链表叫链表 为什么不链表?
- php - 使用 PHP MVC 框架,未填充从 db 到选择框的选定值
- c - 如何将我的输出从 10.000 更改为 10
- python - Backtrader 给出 IndexError:数组分配索引超出范围
- java - 为什么我需要 Servlet 的映射或注释,而不是 JSP?
- python - 需要帮助在 python 输出后添加文本
- sql - 在 SQL 中使用 Json auto 进入打开的 Json
- php - 如何将 HTML 登录页面连接到 myphpadmin 并根据数据库上的凭据将两个帐户定向到 2 个单独的登录页面