以下の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 インスタンスを作成してそれを自分自身に割り当てようとしましたが、これはコンパイルされません。
もちろん、ObjC バージョンのようにヘルパー メソッドを使用できます。
extension UIImage {
class func validImage(named name: String) -> UIImage {
var image = UIImage(named: name)
assert(image == nil, "Image doesn't exist")
return image
}
しかし、イニシャライザを使用してこれを実装する方法はありますか?