objective-c - 解析继承委托(delegate)的不兼容属性类型的语法

标签 objective-c ios delegates protocols

我继承的一些代码有一个恼人的警告。它声明一个协议(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”不兼容

以下是我想出的解决方案:

  1. 删除属性。这有效,但我收到警告 '-myTextFieldSomethingHappened:' not found in protocol(s)
  2. 完全放弃协议(protocol)。没有警告,但如果您忘记在委托(delegate)中实现协议(protocol),您也会失去语义警告。

有没有一种方法可以让编译器满意地定义委托(delegate)属性?

最佳答案

尝试:

@property (nonatomic, assign) id<UITextFieldDelegate,MyTextFieldDelegate> delegate;

关于objective-c - 解析继承委托(delegate)的不兼容属性类型的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188707/

相关文章:

ios - UICollectionViewCell 奇怪的行为。单元格未正确更新图层

iphone - 当其他UIImageView上已经有另一根手指时,不允许在UIImageView上轻击手势

横向隐藏所有 iPhone 类型的 iOS 13 状态栏

c# - 具有四个以上参数(方法参数)的 Action 委托(delegate)

c# - 当调用委托(delegate)时,如何发送用作参数的参数列表?

ios - 使用另一个函数的完成 block

ios - 在 OpenGL ES 中隐藏部分图像

objective-c - iOS - 如何调用 C 函数?

objective-c - 重构为 ARC 给出错误隐式错误 [图片]

.net - 定义事件处理程序