Имеет ли значение тип в этом методе проверки KVC?

Например, в документах метод проверки в стиле KVC реализован так:

-(BOOL)validateAge:(id *)ioValue error:(NSError **)outError

Они использовали id* как тип для ioValue. Так как это не является частью сигнатуры метода, мне интересно, было бы больно делать что-то вроде:

-(BOOL)validateAge:(NSNumber *)ioValue error:(NSError **)outError

Это все еще нормально с KVC?

1 ответ

Решение

Это не сработает, потому что они не одинаковы. id* будет ближе к NSNumber** так как метод принимает указатель на указатель. Итак, ваш метод будет выглядеть так:

-(void)validateAge:(NSNumber**)ioValue error:(NSError**)outError

Но в этом нет никакого смысла. id будет отлично работать для всего, что вам нужно сделать, и если вы измените его, а затем откорректируете этот атрибут, вы сможете внести небольшую ошибку в ваше приложение.

Короткий ответ, да, вы можете изменить тип входного параметра; но ты действительно не должен.

Другие вопросы по тегам