Reputation: 13433
Using Swift, I'm trying to create an array of UIImage objects for a simple animation. Contextual help for animationImages
reads, "The array must contain UI Image objects."
I've tried to create said array as follows, but can't seem to get the syntax correct:
var logoImages: UIImage[]
logoImages[0] = UIImage(name: "logo.png")
This throws: ! Variable logoImages used before being initialized
Then I tried
var logoImages = []
logoImages[0] = UIImage(named: "logo.png")
Which throws: ! Cannot assign to the result of this expression
I've checked the docs here, but the context isn't the same: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html
Upvotes: 40
Views: 101017
Reputation: 76878
You have two problems (and without a regex!)
var logoImages: [UIImage] = []
or
var logoImages: Array<UIImage> = []
or
var logoImages = [UIImage]()
or
var logoImages = Array<UIImage>()
Array.append()
or some of the equivalent syntactic sugar:logoImages.append(UIImage(named: "logo.png")!)
or
logoImages += [UIImage(named: "logo.png")!]
or
logoImages += [UIImage(named: "logo.png")!, UIImage(named: "logo2.png")!]
You need to append to the array because (excerpt from docs):
You can’t use subscript syntax to append a new item to the end of an array. If you try to use subscript syntax to retrieve or set a value for an index that is outside of an array’s existing bounds, you will trigger a runtime error. However, you can check that an index is valid before using it, by comparing it to the array’s count property. Except when count is 0 (meaning the array is empty), the largest valid index in an array will always be count - 1, because arrays are indexed from zero.
Of course you could always simplify it when possible:
var logoImage: [UIImage] = [
UIImage(named: "logo1.png")!,
UIImage(named: "logo2.png")!
]
edit: Note that UIImage now has a "failable" initializer, meaning that it returns an optional. I've updated all the bits of code to reflect this change as well as changes to the array syntax.
Upvotes: 92
Reputation: 2843
You are declaring the type for logoImages but not creating an instance of that type.
Use var logoImages = UIImage[]()
which will create a new array for you.
...and then after creating a new empty Array instance, as described in the answer by @Jiaaro you can't use subscripting to add to an empty array
Upvotes: 2
Reputation: 170
var image : UIImage = UIImage(named:"logo.png")
var logoImages = [image]
Upvotes: 1