2009-08-28 112 views
0

假設我正在Cocoa中編寫一個類,作爲服務器的代理。爲了表示連接的當前狀態,考慮枚舉:將enum轉換爲類層次結構

enum 
{ 
    MyConnectionStatusDisconnected = 0, 
    MyConnectionStatusConnecting, 
    MyConnectionStatusConnected, 
    MyConnectionStatusCount 
}; 
typedef NSUInteger MyConnectionStatus; 

我可能有它活在我的代理類,像這樣:

@interface ServerProxy : NSObject 
{ 
    MyConnectionStatus connectionStatus; 
} 

這很好,但如果我想弄清楚用戶可讀的連接狀態解釋?我可能有這樣的靜態函數:

+(NSString*)statusStringForInt:(MyConnectionStatus)status; 

在這一點上,我趕緊離開面向對象編程的境界。

將此枚舉重構爲類層次結構的最佳方法是什麼?

+0

請參閱。這是相同的答案。 – Ken 2009-08-28 03:39:38

+0

這不是一回事。答案也與我的問題相同。問題是如何將它變成一個乾淨的層次結構。 – 2009-08-28 04:02:06

+0

我以爲你是在一個方法返回一個類與枚舉相同的類。如果您要求徹底擺脫枚舉來支持類層次結構,我認爲人們需要更多細節。目前還不清楚使用類的障礙是什麼。 – Ken 2009-08-28 19:39:17

回答

1

我不會將它重構爲類層次結構。相反,使用NSString常量:

// foo.h 
extern NSString *MyConnectionStatusDisconnected; 


// foo.m 
MyConnectionStatusDisconnected = @"Connection Status: Disconnected"; 

isEqualToString:確實指針平等作爲第一個測試所以這將是快。

如果您需要本地化,則可以在字符串文件中使用Connection Status: Disconnected