2

我有一个基类SLBaseViewController,它是 UIViewController 的子类,并希望它的所有子类都符合协议:

@protocol SLLocalizable <NSObject>

- (void)localize;

@end

问题是我不需要SLBaseViewController遵守协议本身,但是如果子类不符合,我需要编译器警告我。

我试过的:

  1. 像这样定义基类:

    @interface SLBaseViewController : UIViewController <SLLocalizable>
    

    在这种情况下,编译器告诉我SLBaseViewController没有实现localize方法。

  2. 设为localize可选。

    编译器保持沉默。但这不是我需要的。

  3. 使每个子类都符合协议本身。这似乎是正确的方法,但我有 50 多个子类,而且还有很长的路要走。

有没有一种简单的方法可以达到我的目标?

4

2 回答 2

1

除了在子类本身中指定之外,您不能指定子类实现任何协议。

搜索子类来编辑它们(而不是试图记住每个)。反射搜索将能够找到不给出协议名称的子类。

作为安全检查,让超类在被调用时抛出异常,这样你就知道什么时候错过了。显然这仅在测试期间有效。

如果这让你变得偏执,你可以尝试编写一个单元测试来获取所有子类并调用localize它们。

于 2013-09-01T07:27:36.240 回答
1

在什么情况下您需要所有子类来实现某些东西,但不需要公共超类来实现它?

如果它是SLBaseViewController一个不打算直接实例化的抽象类,您可以简单地让它实现-localize,并在主体中抛出异常。或者,您可以简单地忽略警告(毕竟这只是一个警告)。

于 2013-09-02T00:31:26.947 回答