我继承的一些代码有一个恼人的警告。它声明一个协议(protocol),然后使用它来指定委托(delegate)
@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”与从“UITextField”继承的类型“id”不兼容
以下是我想出的解决方案:
- 删除属性。这有效,但我收到警告 '-myTextFieldSomethingHappened:' not found in protocol(s)
- 完全放弃协议(protocol)。没有警告,但如果您忘记在委托(delegate)中实现协议(protocol),您也会失去语义警告。
有没有一种方法可以让编译器满意地定义委托(delegate)属性?
最佳答案
尝试:
@property (nonatomic, assign) id<UITextFieldDelegate,MyTextFieldDelegate> delegate;
关于objective-c - 解析继承委托(delegate)的不兼容属性类型的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188707/