2009-08-28 5 views
0

Supposons que j'écrive une classe dans Cocoa pour servir de proxy à un serveur. Pour représenter l'état actuel de la connexion, pensez à l'énumération:Conversion d'une énumération en une hiérarchie de classes

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

je peut avoir en direct dans ma classe proxy comme ceci:

@interface ServerProxy : NSObject 
{ 
    MyConnectionStatus connectionStatus; 
} 

C'est très bien, mais si je veux comprendre une interprétation lisible par l'utilisateur de l'état de la connexion? Je pourrais avoir une fonction statique comme ceci:

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

À ce stade, je quitte rapidement le domaine de la programmation orientée objet.

Quelle serait la meilleure façon de refactoriser cette énumération dans une hiérarchie de classes?

+0

Veuillez consulter . C'est la même réponse. – Ken

+0

Ce n'est pas vraiment la même question. Les réponses semblent également identiques à ma question. Le problème est comment faire ceci dans une hiérarchie propre. –

+0

Je pensais que vous étiez après une méthode qui retourne une classe avec le même nom que l'énumération. Si vous demandez de vous débarrasser entièrement de l'énumération en faveur d'une hiérarchie de classes, je pense que les gens auront besoin de plus de détails. Les obstacles à l'utilisation des cours ne sont pas clairs pour vous. – Ken

Répondre

1

Je ne voudrais pas le refactoriser dans une hiérarchie de classe. Au lieu de cela, utilisez les constantes NSString:

// foo.h 
extern NSString *MyConnectionStatusDisconnected; 


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

isEqualToString: signifie l'égalité de pointeur comme le premier test donc ce sera rapide.

Vous pouvez ensuite utiliser Connection Status: Disconnected dans votre fichier (s) de chaînes si vous avez besoin de localiser.