转发协议@required到子类

Fil*_*ina 6 objective-c

我有:

@interface SuperClass : UIViewController <UITableViewDelegate,UITableViewDataSource>
Run Code Online (Sandbox Code Playgroud)

然后

@interface SubClass : SuperClass
Run Code Online (Sandbox Code Playgroud)

SuperClass没有实现所需的协议方法SubClass.
是否可以防止警告(说SuperClass实现不完整)?

而不是实现empty/nil方法SuperClass,可以对@required警告进行验证SubClass吗?

Jon*_*ing 10

您可能不会在超类中声明协议采用,但要求在所有子类中遵从.这可以通过+initialize在您的超类中实现,如下所示:

+ (void)initialize
{
  if (self != [SuperClass class] && 
      ![self conformsToProtocol:@protocol(UITableViewDelegate)])
  {
    @throw [NSException ...]
  }
}
Run Code Online (Sandbox Code Playgroud)

这样,每当SuperClass初始化子类时,如果它不符合,它将抛出异常<UITableViewDelegate>.将它放入超类之后,这不需要进一步的工作.


Jos*_*erg 5

不,你要求的基本上是抽象类,在Objective-C中不存在.

最好的办法是将基类中的方法存根,以抛出某种异常.