我继承的一些代码有一个恼人的警告。它声明一个协议,然后使用它来指定委托
@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:”
- 完全放弃该协议。没有警告,但如果您忘记在委托中实现协议,您也会丢失语义警告。
有没有办法定义委托属性以使编译器满意?
try:
@property (nonatomic, assign) id<UITextFieldDelegate,MyTextFieldDelegate> delegate;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)