Ich versuche, mich mit dem Initialisieren leerer Arrays in Swift zu beschäftigen.
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 ...>]
Ich kann jedoch 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 das Initialisieren 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 Sie von der Syntax erwarten würden):
var myNewDictArray: Dictionary[] = []
mit dem Fehler Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'
Die Frage ist also, wie man ein leeres Array von Wörterbuchelementen richtig initialisiert und warum diese Syntax nicht var myNewDictArray: Dictionary[] = []
funktioniert.
quelle
Der Grund, warum dies 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 Zeichenfolgenschlüsseln und Zeichenfolgenwerten:
var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]() var dictArray2: Dictionary<String, String>[] = [] var dictArray3 = Dictionary<String, String>[]()
quelle
dictArray2
tut) oder ihm sofort etwas zuweisen, das der Compiler herausfinden kann (wie esdictArray3
tut). Die erste Zeile ist ausführlicher als nötig, aber der Compiler hat nichts dagegen.Sie können die Elementverkettung nicht 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
quelle
var yourArrayname = [String]() // String or anyOther according to need
quelle
Sie können dies verwenden, wenn Sie Swift 2.3 verwenden möchten!
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)
quelle