Можно ли напечатать проверку параметров для дополнительного метода протокола? - PullRequest
1 голос
/ 08 ноября 2011

На iOS4, если у меня есть закрытый протокол, такой как:

@protocol HTTPDelegate <NSObject>
@optional
- (void) methodDidFinish:(NSDictionary *) response;
- (void) methodDidFail:(NSString *) error;
@end

И у меня есть указатель на делегата вроде:

id<HTTPDelegate> delegate;

Затем я хочу дополнительно вызвать этот метод делегата:

if( [delegate respondsToSelector:@selector(methodDidFail:)] ) {
  [delegate methodDidFail:errorString];
}

Это прекрасно работает. Однако позже я решу использовать NSError * для ошибки и изменить протокол на:

@protocol HTTPDelegate <NSObject>
@optional
- (void) methodDidFinish:(NSDictionary *) response;
- (void) methodDidFail:(NSError *) error;
@end

Если я просто изменю тип одного параметра в необязательном методе протокола, компилятор не будет жаловаться, когда я проверяю (с responsedsToSelector :), если делегат реализует этот метод, и он позволит мне передать errorString с methodDidFail: message , Вместо этого позже, во время выполнения, это приведет к сбою неверного селектора.

Что если я хочу, чтобы компилятор жаловался и проверял типы параметров? Есть ли способ сделать это?

1 Ответ

1 голос
/ 08 ноября 2011

Нет, нет способа проверить типы параметров. Лучше добавить новый метод при изменении типов. Я бы назвал методы делегата так:

- (void) methodDidFailWithError:(NSError *) error;

- (void) methodDidFailWithString:(NSString *) errorString;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...