web-dev-qa-db-fra.com

Swift: Créer un tableau de UIImage

En utilisant Swift, j'essaie de créer un tableau d'objets UIImage pour une animation simple. L'aide contextuelle pour animationImages lit: "Le tableau doit contenir des objets Image d'interface utilisateur."

J'ai essayé de créer ledit tableau comme suit, mais je n'arrive pas à obtenir la syntaxe correcte:

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

Cela jette:! Variable logoImages utilisées avant d'être initialisées

Puis j'ai essayé

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

Ce qui jette:! Impossible d'affecter le résultat de cette expression

J'ai vérifié la documentation ici, mais le contexte n'est pas le même: https://developer.Apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html

35
kmiklas

Vous avez deux problèmes (et sans regex!)

1. Vous ne créez pas de tableau. Tu as besoin de faire:

var logoImages: [UIImage] = []

ou

var logoImages: Array<UIImage> = []

ou

var logoImages = [UIImage]()

ou

var logoImages = Array<UIImage>()

2. Si vous souhaitez ajouter de nouveaux objets à un tableau, vous devez utiliser Array.append() ou une partie du sucre syntaxique équivalent:

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

ou

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

ou

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

Vous devez ajouter au tableau car (extrait de la documentation ):

Vous ne pouvez pas utiliser la syntaxe en indice pour ajouter un nouvel élément à la fin d'un tableau. Si vous essayez d’utiliser la syntaxe d’indice pour extraire ou définir une valeur pour un index situé en dehors des limites existantes d’un tableau, vous déclencherez une erreur d’exécution. Cependant, vous pouvez vérifier qu'un index est valide avant de l'utiliser, en le comparant à la propriété count du tableau. Sauf si nombre est égal à 0 (ce qui signifie que le tableau est vide), le plus grand index valide dans un tableau sera toujours compte - 1, car les tableaux sont indexés à partir de zéro.

Bien sûr, vous pouvez toujours le simplifier lorsque cela est possible:

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

edit: Notez que UIImage a maintenant un initialiseur "failable" , ce qui signifie qu'il renvoie un optionnel. J'ai mis à jour tous les bits de code pour refléter ce changement ainsi que des modifications à la syntaxe du tableau.

81
Jiaaro

Vous déclarez le type pour logoImages mais ne créez pas d'instance de ce type.

Utilisez var logoImages = UIImage[]() qui créera un nouveau tableau pour vous.

... et après avoir créé une nouvelle instance de tableau vide, comme décrit dans la réponse de @Jiaaro, vous ne pouvez pas utiliser d'indice pour ajouter à un tableau vide

2
fqdn
var image : UIImage = UIImage(named:"logo.png")    
var logoImages = [image]
1
Marco Speziali