2013-09-01 18 views
2

我有一個基類SLBaseViewController是的UIViewController的一個子類,並希望其所有子類,以符合協議:如何使所有的子類符合協議?

@protocol SLLocalizable <NSObject> 

- (void)localize; 

@end 

的問題是,我不需要SLBaseViewController符合協議本身,但我需要編譯器來警告我,如果一個子類不符合。

我曾嘗試:

  1. 定義的基類是這樣的:

    @interface SLBaseViewController : UIViewController <SLLocalizable> 
    

    在這種情況下,編譯器告訴我,SLBaseViewController沒有實現localize方法。

  2. 製作localize可選。

    編譯器保持沉默。但那不是我需要的。

  3. 使每個子類符合協議本身。這似乎是一個正確的方法,但我有超過50個子類,這是一個很長的路。

有沒有簡單的方法來達到我的目標?

+0

搜索子類來編輯它們。讓超類拋出一個異常,如果它被調用,所以你知道什麼時候你錯過了某些東西。 – Wain

+0

@很好主意,謝謝。你會把它作爲答案嗎? – Stas

回答

1

您不能指定子類實現任何協議,而不是在子類本身中指定它。

搜索子類來編輯它們(而不是試圖記住每個子類)。反射搜索將能夠找到不提供協議名稱的子類。

作爲一項安全檢查,如果超類的名稱被調用,就會拋出異常,以便知道何時錯過了某些東西。顯然這隻在測試過程中起作用。

如果這讓你偏執,你可以嘗試編寫一個單元測試,其中gets all the subclasseslocalize對他們。

1

在什麼情況下你需要所有的子類來實現某些東西,但是不需要通用的超類來實現它?

如果是SLBaseViewController是一個抽象類,它不是直接實例化的,你可以簡單地使它實現-localize,並在體內拋出異常。或者,您可以簡單地忽略警告(畢竟這只是一個警告)。