Swift中的字典

vic*_*hai 3 dictionary swift

我真的对我们在swift中创建字典的方式感到困惑.那么请你告诉我它们之间有什么不同

var myDic3 = [String : AnyObject]()
Run Code Online (Sandbox Code Playgroud)

var myDic2 = Dictionary <Int,AnyObject>()
Run Code Online (Sandbox Code Playgroud)

var myDic4 = [ : ]
Run Code Online (Sandbox Code Playgroud)

当我声明像myDic4时,我无法为它添加键和值:

myDic4["001"] = "ABC"
Run Code Online (Sandbox Code Playgroud)

并且错误是" 无法分配给此表达式的结果 "

vac*_*ama 6

您可以通过4种不同的方式在Swift中声明和初始化一个空字典:

  1. String
  2. Any
  3. var myDic1 = [String : Any]()
  4. var myDic2 = Dictionary<String, Any>()

这些都会给你相同的结果,这是一个字典,其中var myDic3: [String : Any] = [:]s为键,var myDic4: Dictionary<String, Any> = [:]s为值.

String只是简写Any.他们的意思是一样的.

在上面的情况1和2中,变量的类型由Swift根据分配给它们的值推断.在上面的情况3和4中,类型被明确地分配给变量,然后用空字典初始化它们[String : Any].

当您创建这样的字典时:

var myDic5 = [:]
Run Code Online (Sandbox Code Playgroud)

Swift没有什么可继续的,它推断你的字典是类型的Dictionary<String, Any>.问题是它[:]是一个不可变类型(你不能改变它).可变等价物是一个[:],所以这将工作:

var myDic6: NSMutableDictionary = [:]
Run Code Online (Sandbox Code Playgroud)

但您应该更喜欢使用上面的案例1或3,因为NSDictionary它不是Swift类型,而是来自Foundation框架.事实上,你甚至可以做的唯一原因NSDictionary是因为你已经导入了Foundation框架(与NSMutableDictionary,NSMutableDictionaryvar myDic = [:]).如果不导入Foundation,则会出现语法错误.