Некоторый код, который я унаследовал, имеет раздражающее предупреждение. Он объявляет протокол, а затем использует его для указания делегата
@protocol MyTextFieldDelegate;
@interface MyTextField: UITextField
@property (nonatomic, assign) id<MyTextFieldDelegate> delegate;
@end
@protocol MyTextFieldDelegate <UITextFieldDelegate>
@optional
- (void)myTextFieldSomethingHappened:(MyTextField *)textField;
@end
Классы, которые используют myTextField
реализуют MyTextFieldDelegate
и вызывают его с помощью этого кода:
if ([delegate respondsToSelector:@selector(myTextFieldSomethingHappened:)])
{
[delegate myTextFieldSomethingHappened:self];
}
Это работает, но создает (законное) предупреждение: предупреждение: тип свойства 'id' несовместим с типом 'id 'унаследовано от' UITextField '
Вот решения, которые я придумал:
Есть ли способ определить свойство делегата, чтобы компилятор был доволен?