iphone versiones ¿Cómo defino y uso un ENUM en Objective-C?




versiones de objective c (5)

Decidí una enumeración en mi archivo de implementación como se muestra a continuación, y declare una variable de ese tipo en mi interfaz como PlayerState thePlayerState; y usé la variable en mis métodos. Pero recibo errores que dicen que no está declarado. ¿Cómo declaro y uso correctamente una variable de tipo PlayerState en mis métodos ?:

En el archivo .m

@implementation View1Controller

    typedef enum playerStateTypes
        {
            PLAYER_OFF,
            PLAYER_PLAYING,
            PLAYER_PAUSED
        } PlayerState;

en el archivo .h:

@interface View1Controller : UIViewController {

    PlayerState thePlayerState;

en algún método en el archivo .m:

-(void)doSomethin{

thePlayerState = PLAYER_OFF;

}

En el .h:

typedef enum {
    PlayerStateOff,
    PlayerStatePlaying,
    PlayerStatePaused
} PlayerState;

Recomiendo usar NS_OPTIONS o NS_ENUM. Puedes leer más sobre esto aquí: http://nshipster.com/ns_enum-ns_options/

Aquí hay un ejemplo de mi propio código que usa NS_OPTIONS, tengo una utilidad que establece una subcapa (CALayer) en la capa de UIView para crear un borde.

El h. archivo:

typedef NS_OPTIONS(NSUInteger, BSTCMBorder) {
    BSTCMBOrderNoBorder     = 0,
    BSTCMBorderTop          = 1 << 0,
    BSTCMBorderRight        = 1 << 1,
    BSTCMBorderBottom       = 1 << 2,
    BSTCMBOrderLeft         = 1 << 3
};

@interface BSTCMBorderUtility : NSObject

+ (void)setBorderOnView:(UIView *)view
                 border:(BSTCMBorder)border
                  width:(CGFloat)width
                  color:(UIColor *)color;

@end

El archivo .m:

@implementation BSTCMBorderUtility

+ (void)setBorderOnView:(UIView *)view
                 border:(BSTCMBorder)border
                  width:(CGFloat)width
                  color:(UIColor *)color
{

    // Make a left border on the view
    if (border & BSTCMBOrderLeft) {

    }

    // Make a right border on the view
    if (border & BSTCMBorderRight) {

    }

    // Etc

}

@end

Con los proyectos actuales, es posible que desee utilizar las NS_ENUM() o NS_OPTIONS() .

typedef NS_ENUM(NSUInteger, PlayerState) {
        PLAYER_OFF,
        PLAYER_PLAYING,
        PLAYER_PAUSED
    };

Así es como lo hace Apple para clases como NSString:

En el archivo de encabezado:

enum {
    PlayerStateOff,
    PlayerStatePlaying,
    PlayerStatePaused
};

typedef NSInteger PlayerState;

Consulte las Pautas de codificación en http://developer.apple.com/


Su typedef debe estar en el archivo de encabezado (o en cualquier otro archivo que PlayerState importado en su encabezado), ya que de lo contrario el compilador no sabrá qué tamaño debe hacer para el PlayerState PlayerState. Aparte de eso, me parece bien.





c