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




versiones de objective c (4)

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;

}

Apple proporciona una macro para ayudar a proporcionar una mejor compatibilidad de códigos, incluido Swift. El uso de la macro se ve así.

typedef NS_ENUM(NSInteger, PlayerStateType) {
  PlayerStateOff,
  PlayerStatePlaying,
  PlayerStatePaused
};

Documentado aquí


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/


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




c