2010-08-12 57 views
1

我有一個類將許多消息路由到內部組件實例。所以這個類只有方法定義,但沒有實現。我如何禁止這些動態方法的警告?如何禁止Objective-C警告「類'SomeClass''的不完整實現?

更新

我的代碼示例:

@interface SomeClass : NSObject 
{ 
} 
- (void)mssageA:(id)value1 additionalOption:(id)value2; 
- (void)mssageB:(id)value1 additionalOption:(id)value2; 
- (void)mssageC:(id)value1 additionalOption:(id)value2; 
@end 
@implementation SomeClass 
- (id)forwardingTargetForSelector:(SEL)aSelector 
{ 
    if([email protected](mssageA:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageB:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageC:additionalOption:))  return innerComponentInstance; 

    return [super forwardingTargetForSelector:aSelector]; 
} 
@end 
+0

你可能想在這裏考慮使用的協議,而不是一類的。但仍然是一個很好的問題(因爲我認爲這是例如NSNumber的內部實現的工作原理......) – jtbandes 2010-08-12 04:52:26

+0

如果您不想創建正式協議,只需使用類別來定義方法。當你這樣做時,編譯器不會抱怨它們是否被實現(稱爲非正式協議)。 – 2010-08-12 04:57:39

+0

感謝您的回覆,但我無法弄清楚在這種情況下如何使用協議。也許我的問題不清楚。我修改了我的問題。或者我可以得到一個樣本來爲此應用協議? – Eonil 2010-08-12 05:15:57

回答

1

我認爲一個協議的實現可能看起來像這樣

@protocol SomeProtocol 

@optional 
- (void)mssageA:(id)value1 additionalOption:(id)value2; 
- (void)mssageB:(id)value1 additionalOption:(id)value2; 
- (void)mssageC:(id)value1 additionalOption:(id)value2; 
@end 

@interface SomeClass : NSObject <SomeProtocol> 
{ 
} 

@implementation SomeClass 
- (id)forwardingTargetForSelector:(SEL)aSelector 
{ 
    if([email protected](mssageA:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageB:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageC:additionalOption:))  return innerComponentInstance; 

    return [super forwardingTargetForSelector:aSelector]; 
} 
@end 
+0

我認爲在協議結尾處需要一個@end,否則看起來不錯。 – 2010-08-12 05:43:37

+0

@optional外觀包含應該在使用'respondsToSelector:'之前檢查的實現的含義。我對@optional關鍵字有錯誤的理解嗎? – Eonil 2010-08-12 05:55:15

+0

哦,當然,我只是忘了@end,懶惰的我。 檢查respondsToSelector會更好。你可以做到 - 所以我認爲 - 沒有但會冒險 – Erle 2010-08-12 06:37:25