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?
 
     
     
     
    