Swift:声明一个空字典

我开始通过遵循苹果公司提供The Swift Programming LanguageThe Swift Programming Language来学习Swift。 本书说创build一个空字典应该使用[:]同时声明数组为[]

我声明了一个空数组,如下所示:

 let emptyArr = [] // or String[]() 

但是在声明空的字典时,我得到语法错误:

 let emptyDict = [:] 

我如何申报空字典?

 var emptyDictionary = [String: String]() 
 var populatedDictionary = ["key1": "value1", "key2": "value2"] 

注意 :如果您要随时间更改字典的内容,则将其声明为var (variables)。 你可以将一个空的字典声明为一个let (常量),但是如果你打算随时间改变它的内容,这是毫无意义的,因为常量在初始化后不能被改变。


老答案

创build一个types为<String, String>的空字典将如下所示:

 var emptyDictionary = Dictionary<String, String>() 

除非types信息可用,否则不能使用[:]

在这种情况下,您需要明确提供它:

 var dict = Dictionary<String, String>() 

var意味着它是可变的,所以你可以添加条目。 相反,如果你让它成为一个let你不能进一步修改它( let手段不变)。

例如,如果可以推断types信息,则可以使用[:]简写符号

 var dict = ["key": "value"] // stuff dict = [:] // ok, I'm done with it 

在最后一个例子中,字典已知在第一行有一个Dictionary<String, String>types。 请注意,您不必明确指定,但已经推断。

使用这将工作。

 var emptyDict = [String: String]() 

Swift文档build议采用以下方式初始化一个空的Dictionary:

 var emptyDict = [String: String]() 

当我第一次遇到这个问题时,我有点困惑,因为不同的答案显示不同的方式来初始化一个空的字典。 事实certificate,实际上有很多方法可以做到这一点,尽pipe有些冗余或过于冗长,因为Swift能够推断出types。

 var emptyDict = [String: String]() var emptyDict = Dictionary<String, String>() var emptyDict: [String: String] = [:] var emptyDict: [String: String] = [String: String]() var emptyDict: [String: String] = Dictionary<String, String>() var emptyDict: Dictionary = [String: String]() var emptyDict: Dictionary = Dictionary<String, String>() var emptyDict: Dictionary<String, String> = [:] var emptyDict: Dictionary<String, String> = [String: String]() var emptyDict: Dictionary<String, String> = Dictionary<String, String>() 

你有一个空的字典后,你可以添加一个键值对像这样:

 emptyDict["some key"] = "some value" 

如果您想再次清空字典,可以执行以下操作:

 emptyDict = [:] 

types仍然是<String, String>因为它是如何初始化的。

你可以简单地声明它:

 var emptyDict:NSMutableDictionary = [:] 

你必须给字典一个types

 // empty dict with Ints as keys and Strings as values var namesOfIntegers = Dictionary<Int, String>() 

如果编译器可以推断出types,则可以使用较短的语法

 namesOfIntegers[16] = "sixteen" // namesOfIntegers now contains 1 key-value pair namesOfIntegers = [:] // namesOfIntegers is once again an empty dictionary of type Int, String 

迅速:

 var myDictionary = Dictionary<String, AnyObject>() 

我也在玩。 看起来很奇怪,你可以声明一个空的字典,然后像这样添加一个键/值对:

 var emptyDictionary = Dictionary<String, Float>() var flexDictionary = [:] emptyDictionary["brian"] = 4.5 flexDictionary["key"] = "value" // ERROR : cannot assign to the result of this expression 

但是,您可以使用“Any”types创build一个接受不同值types的字典,如下所示:

 var emptyDictionary = Dictionary<String, Any>() emptyDictionary["brian"] = 4.5 emptyDictionary["mike"] = "hello" 

你需要明确地告诉数据types,或者当你在Swift中声明任何types时可以推断出types。

Swift 3

下面的示例声明了一个字典,其中键为Inttypes,值为Stringtypes。

方法1:初始化程序

 let dic = Dictionary<Int, String>() 

方法2:速记语法

 let dic = [Int:String]() 

方法3:字典文字

 var dic = [1: "Sample"] // dic has NOT to be a constant dic.removeAll() 

您可以将其声明为零,如下所示:

 var assoc : [String:String] 

那么好的东西是你已经排版(注意我使用了var而不是让它们,认为这些是可变的和不可变的)。 然后你可以稍后填写它:

 assoc = ["key1" : "things", "key2" : "stuff"] 

如果你想创build一个任何types的通用字典

 var dictionaryData = [AnyHashable:Any]() 

find你的方法非常方便

var dict:Dictionary = [:]

var dictList = String:用于swift中字典的stringarrSectionTitle =用于swift中数组的string

 var parking = [Dictionary < String, Double >()] 

^这添加了一个[string:双]input字典