I'm rewriting an Objective C category below to Swift:
@implementation UIImage (Extra)
+ (UIImage *)validImageNamed:(NSString *)name
{
UIImage *image = [self imageNamed:name];
NSAssert(image, @"Unable to find image named '%@'", name);
return image;
}
This asks to be implemented as an convenience init, but how can I check if designated initializer self.init(named:) succeeds?
extension UIImage {
convenience init(validateAndLoad name: String!) {
self.init(named: name)
// need to assert here if self.init fails
}
When self.init(named:) call fails, extension's init stops executing.
I've tried creating an UIImage instance and assigning it to self, but this doesn't compile.
Of course, a helper method can be used like in ObjC version:
extension UIImage {
class func validImage(named name: String) -> UIImage {
var image = UIImage(named: name)
assert(image == nil, "Image doesn't exist")
return image
}
But is there a way to implement this using an initializer?