iphone - 我是否需要 @protocol 声明或其他内容来确保子类定义选择器?

标签 iphone ios protocols selector

我有一个类,它执行一些用于写入数据库的通用代码。调出弹出窗口和控件等。虽然我可以将多种类型的元素写入数据库,但每个子类都需要有自己的 -(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/

相关文章:

swift - 具有二元运算的通用函数

iphone - 未收到 UINavigationBarDelegate 回调

generics - 通用类的 Swift 委托(delegate)协议(protocol)

iphone - 在 IOS 中读取 Open-XML 文档

iphone - ios 6.1.1设备将无法运行xcode 4.6

ios - 约束使宽度等于另一个

ios - 取消 UITextView 中的选择/粘贴菜单?

iphone - 如何实现 UIViewController 旋转以响应方向变化?

iphone - 实现 Mobclix 时出错

ios - 使用 SwiftUI 展平 TupleView