我真的对我们在 swift 中创建字典的方式感到困惑。那么你能告诉我两者之间有什么不同吗
var myDic3 = [String : AnyObject]()
and
var myDic2 = Dictionary <Int,AnyObject>()
and
var myDic4 = [ : ]
当我像 myDic4 一样声明时,我无法为其添加键和值:
myDic4["001"] = "ABC"
错误是“无法分配给该表达式的结果"
在 Swift 中,您可以声明并初始化一个空字典,类型为String
用于按键和类型Any
以 4 种不同方式获取值:
var myDic1 = [String : Any]()
var myDic2 = Dictionary<String, Any>()
var myDic3: [String : Any] = [:]
var myDic4: Dictionary<String, Any> = [:]
这些都会给你相同的结果,即一个空字典String
s 作为键并且Any
s 作为值。
[String : Any]
只是简写Dictionary<String, Any>
。它们的含义相同,但首选速记符号。
在上面的情况 1 和 2 中,变量的类型是由 Swift 根据分配给它们的值推断出来的。在上面的情况 3 和 4 中,类型被显式分配给变量,然后用空字典初始化它们[:]
.
当你创建这样的字典时:
var myDic5 = [:]
Swift 没有任何进展,它给出了错误:
空集合文字需要显式类型
历史注释:在旧版本的 Swift 中,它推断[:]
成为类型NSDictionary
。问题是NSDictionary
是不可变类型(您无法更改它)。可变的等价物是NSMutableDictionary
,所以这些可以工作:
var myDic6: NSMutableDictionary = [:]
or
var myDic7 = NSMutableDictionary()
但你应该更喜欢使用上面的情况 1 或 3,因为NSMutableDictionary
不是 Swift 类型,而是来自 Foundation 框架。事实上,你能够做到的唯一原因var myDic = [:]
是因为您已经导入了 Foundation 框架(带有import UIKit
, import Cocoa
, or import Foundation
)。如果没有导入 Foundation,这是一个错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)