Estoy tratando de entender la inicialización de matrices vacías en Swift.
Para una variedad de cadenas, es bastante sencillo:
var myStringArray: String[] = []
myStringArray += "a"
myStringArray += "b"
-> ["a", "b"]
y para enteros
var myIntArray: Int[] = []
myIntArray += 1
myIntArray += 2
-> [1, 2]
también funciona para otros tipos de objetos como los objetos NSImage:
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 ...>]
Sin embargo, no puedo resolver la sintaxis para inicializar una matriz vacía de diccionarios.
Sé que puede tener una variedad de diccionarios porque la inicialización con un valor inicial funciona:
let myDict1 = ["someKey":"someValue"]
let myDict2 = ["anotherKey":"anotherValue"]
var myDictArray = [myDict1]
myDictArray += myDict2
-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]
Sin embargo, esto (que esperaría que fuera la sintaxis) falla:
var myNewDictArray: Dictionary[] = []
con el error Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'
Entonces, la pregunta es ¿cuál es la forma correcta de inicializar una matriz vacía de elementos de diccionario y por qué no funciona esta sintaxis var myNewDictArray: Dictionary[] = []
?
fuente
La razón por la que esto no funciona:
var myNewDictArray: Dictionary[] = []
es que necesita proporcionar tipos para las claves y valores de un diccionario cuando lo define. Cada una de estas líneas le creará una matriz vacía de diccionarios con claves de cadena y valores de cadena:
var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]() var dictArray2: Dictionary<String, String>[] = [] var dictArray3 = Dictionary<String, String>[]()
fuente
dictArray2
hace) o asignarle inmediatamente algo que el compilador pueda averiguar (comodictArray3
hace). La primera línea es más detallada de lo necesario, pero al compilador no le importa.Ya no puede usar la concatenación de elementos.
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
fuente
var yourArrayname = [String]() // String or anyOther according to need
fuente
¡Puedes usar esto si quieres usar swift 2.3!
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)
fuente