web-dev-qa-db-de.com

Initialisieren von leeren Arrays von Wörterbüchern in Swift

Ich versuche meinen Kopf darum zu legen, leere Arrays in Swift zu initialisieren.

Für eine Reihe von Zeichenfolgen ist es ziemlich einfach:

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

-> ["a", "b"]

und für ganze Zahlen

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

-> [1, 2]

es funktioniert auch für andere Objekttypen wie NSImage-Objekte:

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

Allerdings kann ich die Syntax zum Initialisieren eines leeren Arrays von Wörterbüchern nicht ausarbeiten.

Ich weiß, dass Sie eine Reihe von Wörterbüchern haben können, da die Initialisierung mit einem Anfangswert funktioniert:

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

var myDictArray = [myDict1]
myDictArray += myDict2

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

Dies schlägt jedoch fehl (was man von der Syntax erwarten würde):

var myNewDictArray: Dictionary[] = []

mit dem Fehler Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'

Die Frage ist also, wie ein leeres Array von Dictionary Items korrekt initialisiert werden kann und warum diese Syntax var myNewDictArray: Dictionary[] = [] nicht funktioniert.

65
dwkns

Sie müssen den Wörterbüchern Typen zuordnen:

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

oder

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

Bearbeiten : Sie können auch die kürzere Syntax verwenden:

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

oder

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

Dadurch wird ein leeres, unverändertes Wörterbuch erstellt:

let dictionary = [ : ]

Und wenn Sie eine veränderliche wollen:

var dictionary = [ : ]

Beide Wörterbücher sind standardmäßig auf Dictionary<String?, AnyObject?> eingestellt.

9
Erik

Der Grund, warum das nicht funktioniert:

var myNewDictArray: Dictionary[] = []

ist, dass Sie Typen für die Schlüssel und Werte eines Wörterbuchs angeben müssen, wenn Sie es definieren. Jede dieser Zeilen erstellt ein leeres Array von Wörterbüchern mit String-Schlüsseln und String-Werten:

var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]()
var dictArray2: Dictionary<String, String>[] = []
var dictArray3 = Dictionary<String, String>[]()
5
Nate Cook
var yourArrayname = [String]() // String or anyOther according to need
0

Sie können keine Elementverkettung mehr verwenden.

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
0
CPD