Преобразование enum в иерархию классов - PullRequest
0 голосов
/ 28 августа 2009

Допустим, я пишу класс в Какао, чтобы действовать как прокси для сервера. Чтобы представить текущее состояние соединения, рассмотрите перечисление:

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

Возможно, он будет работать в моем прокси-классе следующим образом:

@interface ServerProxy : NSObject
{
    MyConnectionStatus connectionStatus;
}

Это нормально, но что, если я хочу выяснить понятную пользователю интерпретацию состояния соединения? У меня может быть статическая функция, подобная этой:

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

На данный момент я быстро покидаю сферу объектно-ориентированного программирования.

Как лучше всего преобразовать это перечисление в иерархию классов?

1 Ответ

1 голос
/ 28 августа 2009

Я бы не реорганизовал его в иерархию классов. Вместо этого используйте константы NSString:

// foo.h
extern NSString *MyConnectionStatusDisconnected;


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

isEqualToString: делает равенство указателей в качестве первого теста, так что это будет быстро.

Затем вы можете использовать Connection Status: Disconnected в ваших файлах строк, если вам нужно локализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...