2016-05-17 50 views
8

voglio scartare di default della superclasse init method.I può raggiungere questo facilmente con fatalError a Swift:Esiste un Objective-C equivalente a fatalError di Swift?

class subClass:NSObject{ 
    private var k:String! 

    override init(){ 
    fatalError("init() has not been implemented") 
    } 

    init(kk:String){ 
    k = kk 
    } 
}  

Come posso farlo in Objective-C?

risposta

17

È possibile aumentare un'eccezione in questo caso:

Qualcosa di simile. Riferisci questo

[NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"]; 

Oppure puoi anche usare la dichiarazione di asserzione.

NSAssert(NO, @"Subclasses must implement init"); 
0

basta chiamare doesNotRecognizeSelector: metodo NSObject s'. Si potrebbe scrivere:

- (instancetype) init 
{ 
    [self doesNotRecognizeSelector:_cmd]; 
} 

dove _cmd è il parametro nascosta per ogni metodo il cui valore è il selettore del metodo.

2

NSAssert(NO, @"balabala");

o

- (instancetype)init NS_UNAVAILABLE;