mam przepisywanie kategorię Objective C poniżej Swift:obchodzenia Błąd inicjalizacji klasy w rozszerzeniu Swift
@implementation UIImage (Extra)
+ (UIImage *)validImageNamed:(NSString *)name
{
UIImage *image = [self imageNamed:name];
NSAssert(image, @"Unable to find image named '%@'", name);
return image;
}
Ten pyta być realizowane jako init, wygody, ale w jaki sposób mogę sprawdzić, czy wyznaczone initializer self.init (nazwany :) odnosi sukcesy?
extension UIImage {
convenience init(validateAndLoad name: String!) {
self.init(named: name)
// need to assert here if self.init fails
}
Gdy wywołanie self.init (nazwane :) nie powiedzie się, init rozszerzenia przestaje wykonywać.
Próbowałem już utworzyć instancję UIImage i przypisuję ją sobie, ale to się nie kompiluje.
oczywiście metoda pomocnika może być używany jak w wersji objc:
extension UIImage {
class func validImage(named name: String) -> UIImage {
var image = UIImage(named: name)
assert(image == nil, "Image doesn't exist")
return image
}
Ale czy istnieje sposób aby zaimplementować to przy użyciu inicjatora?
Dlaczego warto zwrócić wartość opcjonalną, jeśli funkcja została zaprojektowana tak, aby nigdy nie zwracać 'nil'? – nschum