Swift: crear una matriz de UIImage

Usando Swift, estoy tratando de crear una matriz de objects UIImage para una animation simple. Ayuda contextual para la animationImages Lee imágenes, "La matriz debe contener objects de image de la UI".

He intentado crear dicha matriz de la siguiente manera, pero parece que no puede get la syntax correcta:

 var logoImages: UIImage[] logoImages[0] = UIImage(name: "logo.png") 

Esto arroja:! Logotipo variable Imágenes utilizadas antes de inicializarse

Luego intenté

 var logoImages = [] logoImages[0] = UIImage(named: "logo.png") 

Lo que arroja:! No se puede asignar al resultado de esta expresión.

Revisé los documentos aquí, pero el context no es el mismo: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html

Tienes dos problemas (¡y sin una expresión regular!)

1. No está creando una matriz. Necesitas hacer:

 var logoImages: [UIImage] = [] 

o

 var logoImages: Array<UIImage> = [] 

o

 var logoImages = [UIImage]() 

o

 var logoImages = Array<UIImage>() 

2. Si desea agregar nuevos objects a una matriz, debe usar Array.append() o algunos de los azúcares sintácticos equivalentes:

 logoImages.append(UIImage(named: "logo.png")!) 

o

 logoImages += [UIImage(named: "logo.png")!] 

o

 logoImages += [UIImage(named: "logo.png")!, UIImage(named: "logo2.png")!] 

Debe agregar a la matriz porque (extracto de documentos ):

No puede usar la syntax de subíndice para agregar un elemento nuevo al final de una matriz. Si intenta utilizar la syntax de subíndice para recuperar o establecer un valor para un índice que está fuera de los límites existentes de una matriz, se activará un error de time de ejecución. Sin embargo, puede verificar que un índice sea válido antes de utilizarlo, comparándolo con la propiedad de recuento de la matriz. Excepto cuando el recuento es 0 (es decir, la matriz está vacía), el índice válido más grande en una matriz siempre será count – 1, porque las matrices se indexan desde cero.

Por supuesto, siempre puedes simplificarlo cuando sea posible:

 var logoImage: [UIImage] = [ UIImage(named: "logo1.png")!, UIImage(named: "logo2.png")! ] 

editar: Tenga en count que UIImage ahora tiene un inicializador "faible" , lo que significa que devuelve un opcional. He actualizado todos los bits de código para reflejar este cambio, así como también los cambios en la syntax de la matriz.

Está declarando el tipo de logoImages pero no creando una instancia de ese tipo.

Use var logoImages = UIImage[]() que creará una nueva matriz para usted.

… y luego, después de crear una nueva instancia de matriz vacía, tal como se describe en la respuesta de @Jiaaro, no puede utilizar la suscripción para agregarla a una matriz vacía

 var image : UIImage = UIImage(named:"logo.png") var logoImages = [image]