hightech
hightech

Reputation: 3760

Could not find an overload for “init” that accepts the supplied arguments in Swift

I am trying to figure out how to translate this in Swift and I am also having this error: "Could not find an overload for “init” that accepts the supplied arguments". Any suggestion appreciated. Thanks.

var pageImages:[UIImage] = [UIImage]()
pageImages = [UIImage(named: "example.png"), UIImage(named: "example2.png")]

Upvotes: 4

Views: 5217

Answers (3)

Eugene Braginets
Eugene Braginets

Reputation: 856

Confirming what matt says:

in xCode 6.0 this does work:

images = [UIImage(named: "steps_normal"), UIImage(named: "steps_big")]

but in xCode6.1 values should be unwrapped:

images = [UIImage(named: "steps_normal")!, UIImage(named: "steps_big")!]

Upvotes: 14

Nate Cook
Nate Cook

Reputation: 93276

UIImage(named:) changed to be a failable initializer in Xcode 6.1, which means that it will return nil if any of the images you've listed are missing from your bundle. To safely load the images, try something like this instead:

var pageImages = [UIImage]()
for name in ["example.png", "example2.png"] {
    if let image = UIImage(named: name) {
        pageImages.append(image)
    }
}

Upvotes: 2

matt
matt

Reputation: 535306

Unwrap those optionals. A UIImage is not the same as a UIImage?, which is what the named: initializer returns. Thus:

var pageImages = [UIImage(named: "example.png")!, UIImage(named: "example2.png")!]

(Unless, of course, you actually want an array of optional UIImages.)

Upvotes: 3

Related Questions