Buscar..


Sintaxis

  • typedef NS_ENUM (type, name) {...} - type es el tipo de enumeración y name es el nombre del enum. los valores están en "...". Esto crea una enumeración básica y un tipo para ir con él; los programas como Xcode asumirán que una variable con el tipo de enumeración tiene uno de los valores de enumeración

Definiendo una enumeración

Las enumeraciones se definen por la siguiente sintaxis.

typedef NS_ENUM(NSUInteger, MyEnum) {
    MyEnumValueA,
    MyEnumValueB,
    MyEnumValueC,
};

También puede establecer sus propios valores en bruto para los tipos de enumeración.

typedef NS_ENUM(NSUInteger, MyEnum) {
    MyEnumValueA = 0,
    MyEnumValueB = 5,
    MyEnumValueC = 10,
};

También puede especificar en el primer valor y todo lo siguiente lo usará con el incremento:

typedef NS_ENUM(NSUInteger, MyEnum) {
    MyEnumValueA = 0,
    MyEnumValueB,
    MyEnumValueC,
};

Las variables de esta enumeración pueden ser creadas por MyEnum enumVar = MyEnumValueA .

Declaración de enumeración typedef en Objective-C

Una enumeración declara un conjunto de valores ordenados; typedef simplemente agrega un nombre práctico a esto. El 1er elemento es 0 etc.

 typedef enum {
        Monday=1,
        Tuesday,
        Wednesday

    } WORKDAYS;

    WORKDAYS today = Monday;//value 1

Convertir C ++ std :: vector a una matriz Objective-C

Muchas bibliotecas de C ++ usan enumeraciones y devuelven / reciben datos utilizando vectores que contienen enumeraciones. Como C enums no son objetos de Objective-C, las colecciones de Objective-C no se pueden usar directamente con C enums. El siguiente ejemplo se ocupa de esto mediante el uso de una combinación de NSArray y genéricos y un objeto de envoltura para la matriz. De esta manera, la colección puede ser explícita sobre el tipo de datos y no hay ninguna preocupación acerca de las posibles fugas de memoria con matrices C Se utilizan objetos Objective-C.

Aquí está el objeto C enum y Objective-C equivalente:

typedef enum 
{  
  Error0 = 0,
  Error1 = 1,
  Error2 = 2
} MyError;

@interface ErrorEnumObj : NSObject

@property (nonatomic) int intValue;

+ (instancetype) objWithEnum:(MyError) myError;
- (MyError) getEnumValue;

@end 

@implementation ErrorEnumObj

+ (instancetype) objWithEnum:(MyError) error
{
    ErrorEnumObj * obj = [ErrorEnumObj new];
    obj.intValue = (int)error;
    return obj;
}

- (MyError) getEnumValue
{
    return (MyError)self.intValue;
}

@end

Y aquí hay un posible uso de este en Objective-C ++ (la NSArray resultante se puede usar en archivos de Objective-C solo si no se usa C ++).

class ListenerImpl : public Listener
{
public:
    ListenerImpl(Listener* listener) : _listener(listener) {}
    void onError(std::vector<MyError> errors) override
    {
        NSMutableArray<ErrorEnumObj *> * array = [NSMutableArray<ErrorEnumObj *> new]; 
        for (auto&& myError : errors)
        {
            [array addObject:[ErrorEnumObj objWithEnum:myError]];
        }
        [_listener onError:array];
    }

private:
    __weak Listener* _listener;
}

Si este tipo de solución se va a utilizar en múltiples enumeraciones, la creación de EnumObj (declaración e implementación) se puede hacer usando una macro (para crear una plantilla como solución).



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow