我正在将下面的 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:) 调用失败时,扩展的 init 停止执行。
我尝试创建一个 UIImage 实例并将其分配给 self,但这不会编译。
当然,可以像在 ObjC 版本中一样使用辅助方法:
extension UIImage {
class func validImage(named name: String) -> UIImage {
var image = UIImage(named: name)
assert(image == nil, "Image doesn't exist")
return image
}
但是有没有办法使用初始化器来实现呢?