На 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 , Вместо этого позже, во время выполнения, это приведет к сбою неверного селектора.
Что если я хочу, чтобы компилятор жаловался и проверял типы параметров? Есть ли способ сделать это?