Sto riscrivendo una categoria di Objective C al di sotto di Swift:Manipolazione Errore di inizializzazione di classe in estensione Swift
@implementation UIImage (Extra)
+ (UIImage *)validImageNamed:(NSString *)name
{
UIImage *image = [self imageNamed:name];
NSAssert(image, @"Unable to find image named '%@'", name);
return image;
}
Questo chiede di essere implementato come un init convenienza, ma come posso controllare se designato inizializzatore self.init (nome :) succede?
extension UIImage {
convenience init(validateAndLoad name: String!) {
self.init(named: name)
// need to assert here if self.init fails
}
Quando self.init (dal nome :) chiamata non riesce, init di estensione interrompe l'esecuzione.
Ho provato a creare un'istanza UIImage e assegnarlo a sé, ma questo non viene compilato.
Naturalmente, un metodo di supporto può essere utilizzato come nella versione objC:
extension UIImage {
class func validImage(named name: String) -> UIImage {
var image = UIImage(named: name)
assert(image == nil, "Image doesn't exist")
return image
}
Ma c'è un modo per implementare questo utilizzando un inizializzatore?
Perché restituire un optional se la funzione è progettata per non restituire mai 'nil'? – nschum