2015-08-03 6 views
5

Con la nuova xcode7 Apple ha introdotto farmaci generici e annullabilità per Objective-C (Developer guide)Come utilizzare correttamente i generici su obj-c?

ma sembra essere molto diverso da quello che abbiamo sul veloce.

Nullability:

- (nonnull NSString *)something { 
    return nil; 
} 

Questo dovrebbe sollevare un avvertimento! E si può anche assegnare il valore di ritorno di questo metodo per un nonnull variabile come:

//@property (copy, nonnull) NSString *name 

obj.name = [obj something]; 

Generics: Guardando questo esempio:

@property (nonatomic, strong, nonnull) NSMutableArray <UIView *> *someViews; 

un messaggio di avviso viene generato quando qualcosa di diverso da un UIView è inserito nell'array

[self.someViews addObject:@"foobar"]; //<- this raises an error 

ma non in questo caso:

self.someViews = [@[@"foobar"] mutableCopy]; 

né in questo caso:

NSString *str = [self.someViews firstObject]; 

Quindi la domanda è, sto usando farmaci generici e nullability in modo sbagliato o sono lontani dalla realizzazione Swift?

+0

sembra che non ci sia un uso "corretto" di generici e nullability. Offrono solo alcuni avvisi nel caso specifico e sono più utili per comunicare l'intento dello sviluppatore. – IgnazioC

+0

Penso che dovrebbe essere una richiesta di funzionalità in quanto sembra il tipo di cose che l'analizzatore statico può catturare. – Moxy

risposta

1
self.someViews = [@[@"foobar"] mutableCopy]; 

mutableCopy è ereditato da NSObject, dove si è dichiarato a tornare id. Non è dichiarato da NSArray nello specifico e NSArray non decide il tipo di reso.

NSString *str = [self.someViews firstObject]; 

Questo fa invia un avvertimento per me.

Problemi correlati