在Swift中初始化空字典的数组

我试图围绕在Swift中初始化空数组。

对于一个string数组,它非常简单:

var myStringArray: String[] = [] myStringArray += "a" myStringArray += "b" -> ["a", "b"] 

和整数

 var myIntArray: Int[] = [] myIntArray += 1 myIntArray += 2 -> [1, 2] 

它也适用于其他types的对象,如NSImage对象:

 let path = "/Library/Application Support/Apple/iChat Icons/Flags/" let image1 = NSImage(byReferencingFile: path + "Brazil.png") let image2 = NSImage(byReferencingFile: path + "Chile.png") var myImageArray: NSImage[] = [] myImageArray += image1 myImageArray += image2 -> [<NSImage 0x7fe371c199f0 ...>, <NSImage 0x7fe371f39ea0 ...>] 

不过,我不能解决初始化一个空的字典数组的语法。

我知道你可以有一个字典数组,因为初始化初始值的作品:

 let myDict1 = ["someKey":"someValue"] let myDict2 = ["anotherKey":"anotherValue"] var myDictArray = [myDict1] myDictArray += myDict2 -> [["someKey": "someValue"], ["anotherKey": "anotherValue"]] 

编辑:在下面的代码(混合myNewDictArray和myDictArray)有一个错误,当纠正它不工作,因为我说过了。

如下所示:

 let myDict1 = ["someKey":"someValue"] let myDict2 = ["anotherKey":"anotherValue"] var myNewDictArray: AnyObject = [] myDictArray += myDict1 myDictArray += myDict2 -> [["someKey": "someValue"], ["anotherKey": "anotherValue"]] 

然而,这(你期望的语法)失败:

 var myNewDictArray: Dictionary[] = [] 

与错误Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'

所以问题是什么是正确的方式来初始化一个空的数组字典项目,为什么不这个语法var myNewDictArray: Dictionary[] = []工作?

你需要给字典的types:

 var myNewDictArray: [Dictionary<String, Int>] = [] 

要么

 var myNewDictArray = [Dictionary<String, Int>]() 

编辑 :您也可以使用较短的语法:

 var myNewDictArray: [[String:Int]] = [] 

要么

 var myNewDictArray = [[String:Int]]() 

这将创build一个空的,不可变的字典:

let dictionary = [ : ]

如果你想要一个可变的:

var dictionary = [ : ]

这两个字典都默认为Dictionary<String?, AnyObject?>

这是不工作的原因:

 var myNewDictArray: Dictionary[] = [] 

在定义字典时,需要为字典的键和值提供types。 这些行中的每一行都会为您创build一个空string键和string值的字典数组:

 var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]() var dictArray2: Dictionary<String, String>[] = [] var dictArray3 = Dictionary<String, String>[]() 

你不能再使用元素连接。

 class Image {} Image i1 Image i2 var x = [Image]() x += i1 // will not work (adding an element is ambiguous) x += [i1] // this will work (concatenate an array to an array with the same elements) x += [i1, i2] // also good 
 var yourArrayname = [String]() // String or anyOther according to need 

你可以使用这个,如果你想使用SWIFT 2.3!

 let path = "/Library/Application Support/Apple/iChat Icons/Flags/" let image1 = UIImage(contentsOfFile: readPath + "Brazil.png") let image2 = UIImage(contentsOfFile: readPath + "Chile.png") var myImageArray = [UIImage]() myImageArray.append(image1) myImageArray.append(image2)