2015-08-27 39 views
0

我還是新來Objective-C(來自Java和C#背景),並且我正在實現一個iOS SDK的插件系統我正在開發。For ... in循環結果使用未聲明的indetifier

我已經定義了我的插件頭(Plugin.h),如下所示(java counterpath將是一個抽象類,糾正我,如果我在這裏做任何錯誤)。

@protocol Plugin <NSObject> 
@required 
- (void)initialize; 
- (NSString *) getPluginName; 
- (NSString *) getVersion; 
@end 

然後,我在我的SDK中有一個方法可以用來註冊插件。該數組將是從TFTPlugin繼承的一組對象。

+ (void)registerPlugins:(NSMutableArray*) array 
{ 
    for(Plugin *plugin in array) 
    { 
     [pluginClasses addObject:plugin]; 
    } 
} 

但我在for循環得到一個錯誤:未聲明的標識符「插件」的使用。

任何想法我在這裏做錯了嗎?

感謝

+0

對不起,更正了代碼。儘管如此,還是一樣的錯誤 – Science

+0

您需要複製並粘貼REAL代碼,而不必在拼寫錯誤後修復輸入錯誤。 – rmaddy

+1

'Plugin'不是一個類,對不對?這是一個協議。所以當你聲明一個類型爲'Plugin'的對象時,編譯器會報錯。 – michaelrccurtis

回答

1

試試這個:

for(id plugin in array){ 
    if([[plugin class] conformsToProtocol:@protocol(Plugin)]) { 
     [pluginClasses addObject:plugin]; 
    } 
} 

的檢查,看它是否符合協議是可選的,如果你知道你正在傳遞的一切實際執行。

+0

非常感謝,那就是我一直在尋找的東西。 – Science

+1

稍微好一點的解決方案(但是這裏沒有任何效果)將用於'for(id array in array)'。 –

+0

好點,但請注意,如果您想避免陣列中意外的非插件發生運行時錯誤,您仍然需要'conformsToProtocol'。 – michaelrccurtis