ich eine Objective C Kategorie unten zu Swift bin Umschreiben:Handhabung Klasseninitialisierung Ausfall in Swift Erweiterung
@implementation UIImage (Extra)
+ (UIImage *)validImageNamed:(NSString *)name
{
UIImage *image = [self imageNamed:name];
NSAssert(image, @"Unable to find image named '%@'", name);
return image;
}
Dies fragt als Bequemlichkeit init umgesetzt werden, aber wie kann ich überprüfen, ob bezeichnet initializer self.init (benannt :) gelingt?
extension UIImage {
convenience init(validateAndLoad name: String!) {
self.init(named: name)
// need to assert here if self.init fails
}
Wenn der Aufruf von self.init (named :) fehlschlägt, wird die Ausführung der Erweiterung init beendet.
Ich habe versucht, eine UIImage-Instanz erstellen und es zum Selbst zuweisen, aber das nicht kompiliert.
Natürlich kann eine Hilfsmethode wie in ObjC Version verwendet werden:
extension UIImage {
class func validImage(named name: String) -> UIImage {
var image = UIImage(named: name)
assert(image == nil, "Image doesn't exist")
return image
}
Aber gibt es eine Möglichkeit, dies mit einem Initialisierer zu implementieren?
Warum ein optionales zurückgeben, wenn die Funktion niemals 'nil' zurückgibt? – nschum