将枚举转换为类层次结构

时间:2009-08-28 02:55:00

标签: objective-c cocoa design-patterns refactoring

假设我在Cocoa中编写一个类来充当服务器的代理。要表示连接的当前状态,请考虑枚举:

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

我可能会把它放在我的代理类中,如下所示:

@interface ServerProxy : NSObject
{
    MyConnectionStatus connectionStatus;
}

这没关系,但是如果我想找出用户可读的连接状态解释怎么办?我可能有这样的静态函数:

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

此时我很快就离开了面向对象编程的领域。

将此枚举重构为类层次结构的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我不会将它重构为类层次结构。相反,使用NSString常量:

// foo.h
extern NSString *MyConnectionStatusDisconnected;


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

isEqualToString:将指针相等作为第一个测试,因此速度很快。

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