2015-10-15 51 views
1

要使用JSON數據工作,我在我的應用程序的AFNetworking庫收到,我定義上的NSDictionary類別在文件中的NSDictionary + JSON.h:我可以在Objective C類別中聲明一個非公共方法嗎?如果是這樣,怎麼辦?

@interface NSDictionary (JSON) 
- (NSString *) name; 
- (NSString *) extension; 
... 
@end 

我在執行這些方法,我想聲明和使用,我不希望把在頭文件中一個輔助方法,因爲它只是一個實現細節:

- (NSString *) valueForKeyFromDictionaryOrIndexes:(NSString *)key; 

我實現文件的NSDictionary + JSON.m看起來是這樣的:

#import "NSDictionary+JSON.h" 

@interface NSDictionary() 
// Putting my method declaration here produces a warning. 
... 
@end 


@implementation NSDictionary (JSON) 

- (NSString *) valueForKeyFromDictionaryOrIndexes:(NSString *)key { 

    NSString * value = [self valueForKey:key]; 

    // implementation details omitted 

    return value; 
} 

- (NSString *) name { 

    return [self valueForKeyFromDictionaryOrIndexes:@"Name"]; 
} 

- (NSString *) extension { 

    return [self valueForKeyFromDictionaryOrIndexes:@"Extension"]; 
} 

... 

@end 

這工作正常,所以在這個意義上,沒有真正的問題。但是:我的幫手方法在定義之前從未被聲明過。我感到有點不舒服。如果我將聲明放入實現文件中的@interface ... @end部分中,在註釋位置(我認爲這將是宣佈非公共方法的正確位置),我會收到警告:

類別被實施,這將也由它的主類

我試圖固定來實現的方法,其通過用 @interface的NSDictionary(JSON) 但替換當然 @interface的NSDictionary() , ,給了我不同的警告:

類別「JSON」對接口的

重複定義「的NSDictionary」

很公平,這確實是一樣的一個在我的頭文件,所以這不是一個妥善的解決辦法。這讓我想到:在類別實現中聲明非公共方法的正確方式/位置是什麼?

+0

您需要在添加到框架類的方法中添加前綴。 –

回答

1

根本沒有必要在@interface內聲明一個「私人」的Obj-C方法。

+0

我注意到它本身並不需要 - 它沒有它就可以工作。我想我的問題更多:是不是宣佈它在Objective C中被認爲是正常/良好的風格? – ecotax

+0

這是完全正常和良好的風格。 – NRitH

相關問題