arrays - objetos - Inicializando matrices vacías de diccionarios en Swift
inicializacion de un diccionario en swift (6)
Estoy tratando de ajustar mi cabeza para inicializar matrices vacías en Swift.
Para una serie 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 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 descifrar 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"]]
EDITAR: Hubo un error en el siguiente código (mezclando myNewDictArray y myDictArray) y cuando se corrigió no funciona como dije.
como lo hace esto:
let myDict1 = ["someKey":"someValue"]
let myDict2 = ["anotherKey":"anotherValue"]
var myNewDictArray: AnyObject = []
myDictArray += myDict1
myDictArray += myDict2
-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]
Sin embargo, esto (que esperaría que sea 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 del diccionario y por qué no funciona esta sintaxis var myNewDictArray: Dictionary[] = []
?
¡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)
Esto creará un diccionario vacío e inmutable:
let dictionary = [ : ]
Y si quieres una mutable:
var dictionary = [ : ]
Ambos diccionarios predeterminados a Dictionary<String?, AnyObject?>
.
La razón por la que esto no está funcionando:
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 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>[]()
Necesitas dar tipos a los diccionarios:
var myNewDictArray: [Dictionary<String, Int>] = []
o
var myNewDictArray = [Dictionary<String, Int>]()
Editar : También puede usar la sintaxis más corta:
var myNewDictArray: [[String:Int]] = []
o
var myNewDictArray = [[String:Int]]()
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
var yourArrayname = [String]() // String or anyOther according to need