gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 10:41:17 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com