2013-05-01 3 views
0

На мой вопрос, наверное, очень просто ответить. У меня есть собственный написанный назначенный инициализатор, который попадает в параметр BOOL.Пользовательский инициализатор с параметром BOOL и исключением?

В нем я хочу проверить, прошел ли BOOL или что-то еще. Если что-то еще, я хочу поднять исключение.

Я также хочу переопределить инициализацию по умолчанию и указать ее на назначенный intializer вместо вызова super и передать нуль там, чтобы пользователь получил правильное исключение, если он не использует назначенный инициализатор.

-(id)init 
{ 
    return [self initWithFlag:nil]; 
} 


-(id)initWithFlag:(BOOL)flag 
{ 
    //get the super self bla bla 

    if (flag IS-NOT-A-BOOL) 
    { 
     //raising exception here 
    } 
    //store the flag 

    return self; 
} 

Что должно быть вместо IS-NOT-A-BOOL?

ответ

0

BOOL в объективе c может привести либо к YES, либо NO, и все будет передано одному из этих значений. Как насчет использования NSNumber, содержащий значение bool? Как:

-(id)initWithFlag:(NSNumber *)flag 
{ 
    //get the super self bla bla 

    if (!flag) // Check whether not nil 
    { 
     //raising exception here 
     [NSException raise:@"You must pass a flag" format:@"flag is invalid"]; 
    } 
    //store the flag 
    BOOL flagValue = [flag boolValue]; 

    return self; 
} 

В этом случае вы можете вызвать метод, как этого

[self initWithFlag:@YES]; // or @NO, anyway, it won't throw an exception 

или это

[self initWithFlag:nil]; // it will throw an exception 
+1

Явного бокс ненужно с булевыми литералами. '@ YES' и' @ NO' работают нормально. – CodaFi

+0

Правда, я только что обновил ответ. благодаря –

Смежные вопросы