Ich versuche, mich mit dem Initialisieren leerer Arrays in Swift zu beschäftigen.Initialisierung von leeren Arrays von Wörterbüchern in Swift
Für eine Reihe von Strings es ziemlich gerade ist nach vorn:
var myStringArray: String[] = []
myStringArray += "a"
myStringArray += "b"
-> ["a", "b"]
und für ganze Zahlen
var myIntArray: Int[] = []
myIntArray += 1
myIntArray += 2
-> [1, 2]
es auch für andere Arten von Objekten arbeitet auch 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 nicht ausarbeiten, um ein leeres Array von Dictionaries zu initialisieren.
Ich weiß, dass Sie eine Reihe von Wörterbücher haben können, weil mit einem Anfangswert initialisiert funktioniert:
let myDict1 = ["someKey":"someValue"]
let myDict2 = ["anotherKey":"anotherValue"]
var myDictArray = [myDict1]
myDictArray += myDict2
-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]
EDIT: Es gab einen Fehler in dem folgenden Code (Misch myNewDictArray und myDictArray), und wenn es doesn korrigiert‘ Ich arbeite wie gesagt.
wie sich dies:
let myDict1 = ["someKey":"someValue"]
let myDict2 = ["anotherKey":"anotherValue"]
var myNewDictArray: AnyObject = []
myDictArray += myDict1
myDictArray += myDict2
-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]
Dies ist jedoch (die Sie die Syntax erwarten würden) nicht:
var myNewDictArray: Dictionary[] = []
mit dem Fehler Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'
Also die Frage ist, was ist der richtige Weg, um ein leeres Array von Dictionary Items zu initialisieren und warum funktioniert diese Syntax var myNewDictArray: Dictionary[] = []
nicht?
Ja, das funktioniert. Irgendeine Idee, warum es zwei Möglichkeiten gibt, es zu tun? – dwkns
Swift verwendet * Typinferenz * zur Compile-Zeit, so dass, wenn die Deklaration einer Variablen können Sie entweder den Typ angeben (wie 'dictArray2' der Fall ist) oder sie sofort etwas zuweisen, die der Compiler herausfinden können (wie' dictArray3' tut). Die erste Zeile ist ausführlicher als nötig, aber dem Compiler ist das egal. –
ich hatte auf Swift 2 ** var productImageArray zu ändern: [Dictionary] = [] ** –
swiftBoy