Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initialising empty arrays of dictionaries in Swift

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?

like image 519
dwkns Avatar asked Jun 09 '14 01:06

dwkns


People also ask

How do you initialize an empty set in Swift?

2.1 Creating an empty set A set is an unordered collection of unique elements. A set in Swift is declared using one form: Set<ElementType> . Set<String>() creates an empty set of strings. Swift is able to infer the set type, so the type annotation : Set<String> is optional.


2 Answers

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]]() 
like image 165
drewag Avatar answered Sep 24 '22 15:09

drewag


This will create an empty, immutable dictionary:

let dictionary = [ : ]

And if you want a mutable one:

var dictionary = [ : ]

Both of these dictionaries default to Dictionary<String?, AnyObject?>.

like image 43
Erik Avatar answered Sep 23 '22 15:09

Erik