Я переписываю категорию Objective C ниже в Swift:
@implementation UIImage (Extra)
+ (UIImage *)validImageNamed:(NSString *)name
{
UIImage *image = [self imageNamed:name];
NSAssert(image, @"Unable to find image named '%@'", name);
return image;
}
Это запрашивается, чтобы быть реализован как удобный init, но как я могу проверить, назначен ли назначенный инициализатор self.init(named:) успешно?
extension UIImage {
convenience init(validateAndLoad name: String!) {
self.init(named: name)
// need to assert here if self.init fails
}
Когда self.init(named:) call failed, завершение инициализации завершает выполнение.
Я попытался создать экземпляр UIImage и присвоить его себе, но это не скомпилируется.
Конечно, вспомогательный метод может использоваться как в версии ObjC:
extension UIImage {
class func validImage(named name: String) -> UIImage {
var image = UIImage(named: name)
assert(image == nil, "Image doesn't exist")
return image
}
Но есть ли способ реализовать это с помощью инициализатора?