Soy nuevo en Obj-C así que discúlpeme si esta es una pregunta estúpida:Clases de estilo Java-enum en Objective-C?
¿Cómo puedo implementar algunas al estilo de las enums de Javas? O para ser más precisos:
Quiero una clase con algunas propiedades conocidas que son correctas en tiempo de compilación y únicas por instancia. Además, solo quiero un tipo de instancia.
te voy a dar un ejemplo en Java:
public enum MessageTypes {
DEFAULT("white", "standard", 1),
EXPRESS("red", "expressMessage", 2),
BORADCAST("green", "broadcast", 3);
String color; String tagName; int dbId;
MessageTypes(String color, String tagName, int dbId) {
// you get the idea
}
//some methonds like getEnumByTagName
}
¿Cómo hacer algo como esto en Objective-C? ¿Me estoy perdiendo de algo? ¿Es este un mal patrón en absoluto?
¡Gracias de antemano!
EDITAR: Lo siento, si no me aclaro. Sé que las enumeraciones obj-cc no son lo que estoy buscando (ya que solo son marginalmente más que un typedef a un int).
Me gustaría crear un conjunto de instancias (kind-of-singleton, inmutable) de una clase específica. El patrón singleton en Apples Dev-Docs no sirve, ya que quiero múltiples instancias distintas de una clase, cada una con valores individuales en sus propiedades.
El objetivo de esto es tener varios tipos de mensajes (alrededor de 20) que se pueden asignar a un mensaje como una propiedad. Cada uno de mis tipos de mensajes tiene un color (fijo y predefinido), valor de atributo (en una representación XML) y una identificación numérica.
En Java, usaría una enumeración como en mi ejemplo de código. ¿Pero cómo creo diferentes MessageTypes y los asoció con sus propiedades en Obj-C?
Crear 20 subcategorías de MessageType (cada una con una instancia de singleton que contiene las propiedades) parece mucho trabajo para una tarea tan simple y una exageración total.
Mi enfoque actual es crear una clase con un NSArray que contenga las diferentes instancias. En el primer acceso de un método como +(id)messageTypeForId:NSInteger id_
, el NSArray está prepoblado. Pero esto se siente totalmente torpe y para nada elegante ...
¿Hay un enfoque más satisfactorio?
El macro es más feo en mi punto de vista, pero realmente me gusta su primera solución. Eso parece ser mejor (y más parecido al cacao) que mi enfoque. Gracias. –
Veo cómo 'convencionalmente' y 'compartido' son utilizados por la convención en algunas clases, ¿hay otros prefijos como esos? – zekel
En su primera solución, ¿por qué comprueba si thisMessageType es nulo antes de llamar a alloc? ¿No será siempre nulo debido a la línea que lo precede? Thx por ayudar a un novato. –