我有一个协议(protocol):
@protocol Gadget <NSObject>
@property (readonly) UIView *view;
- (void) attachViewToParent:(UIView *)parentView;
@end
还有一个“抽象”基类,带有 -(UIView *)view
的实现(作为 getter,未显示):
// Base functionality
@interface AbstractGadget : NSObject {
UIView *view;
}
@property (readonly) UIView *view;
@end
但是当我在 AbstractGadget
的子类中实现 Gadget
协议(protocol)时,如下所示:
// Concrete
@interface BlueGadget : AbstractGadget <Gadget> {
}
- (void) attachViewToParent:(UIView *)parentView;
@end
@implementation BlueGadget
- (void) attachViewToParent:(UIView *)parentView {
//...
}
@end
我收到一个编译器错误,告诉我“警告:属性‘view’需要定义方法‘-view’。”我可以使用 @dynamic
或添加一个 stub 方法来解决这个问题:
- (UIView *) view {
return [super view];
}
但我只想知道我是否正在做不受支持的事情、我不应该做的事情,或者这是否只是编译器中的限制/错误?
最佳答案
通过将属性声明为@dynamic,您是在告诉编译器属性getter(和setter,如果需要的话)是在别处(可能在运行时)实现的。对我来说,这听起来像是一个非常合理的用例。
参见 The Docs想要查询更多的信息。
关于objective-c - 继承的@property 不能满足 <protocol> @property 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3295782/