Initialising empty arrays of dictionaries in Swift

dwkns picture dwkns · Jun 9, 2014 · Viewed 97.5k times · Source

I'm trying to wrap my head around initialising empty arrays in Swift.

For an array of strings it's pretty straight forward :

var myStringArray: String[] = []
myStringArray += "a"
myStringArray += "b"

-> ["a", "b"]

and for integers

var myIntArray: Int[] = []
myIntArray += 1
myIntArray += 2

-> [1, 2]

it also works for other types of object such as NSImage objects :

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 ...>]

However I can't work out the syntax to initialise an empty array of Dictionaries.

I know you can have an array of Dictionaries because initialising with an initial value works :

let myDict1 = ["someKey":"someValue"]
let myDict2 = ["anotherKey":"anotherValue"]

var myDictArray = [myDict1]
myDictArray += myDict2

-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]

This however (which you'd expect the syntax to be) fails :

var myNewDictArray: Dictionary[] = []

with the error Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'

So the question is what is the correct way to initialise a empty array of Dictionary Items and why doesn't this syntax var myNewDictArray: Dictionary[] = [] work?

Answer

drewag picture drewag · Jun 9, 2014

You need to give types to the dictionaries:

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

or

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

Edit: You can also use the shorter syntax:

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

or

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