我有一个类,它执行一些用于写入数据库的通用代码。调出弹出窗口和控件等。虽然我可以将多种类型的元素写入数据库,但每个子类都需要有自己的 -(void) writeTagValue
选择器来实现元素的写入。
基类有一个选择器来调用self.writeTagValue
,但由于基类并不真正执行任何写入操作,因此它的-(void) writeElement
选择器为空,其中包含 abort();
。
我在基类.h 中实现了一个协议(protocol)
@protocol IoUISEWriteAnimation <NSObject>
-(void) writeTagValue;
-(IBAction)saWriteValue:(NSNotification *)notification;
@end
将协议(protocol)添加到子类中,现在如果子类没有定义选择器,我会收到编译器警告。
我想知道的是,有没有办法删除基类中空的 -(void) writeElement
选择器?
最佳答案
你可以这样做:
@protocol MyProtocol<NSObject>
@required
-(void) myRequiredMethod;
@optional
-(void) myOptionalMethod;
@end
当您需要调用可选方法时,您可以执行以下操作:
if ([delegate respondsToSelector:@selector(myOptionalMethod)])
[delegate myOptionalMethod];
else
// abort, or ignore.
关于iphone - 我是否需要 @protocol 声明或其他内容来确保子类定义选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232051/