Tengo algunos UIPopoverViewControllers
que envían mensajes para delegar UIViewControllers
para pasar eventos de IU. En lugar de escribir un método separado para cada evento, tengo un método en el delegado con una instrucción switch que determina cómo manejar el evento en función de una constante pasada (ejemplo a continuación).cómo compartir constantes (enumeraciones) entre clases?
Este es probablemente un diseño pobre, pero es lo que se me ocurrió. He visto this pregunta sobre enumeraciones o clases estáticas pero no entendí las respuestas.
Entonces, ¿qué es lo que estoy haciendo MALO y hay una manera en que puedo definir las enumeraciones en un solo lugar para que no tenga que mantener varios bits de código que puedan perderse fácilmente?
EDITAR bien, escarbar un poco más (+ herehere) Veo que podría estar en el camino correcto. Así que supongo que necesito saber qué y dónde está un archivo implementation
en iOS.
enum {
kSetPlaybackType = 0,
kSetAllNotesOn,
kSetAllNotesOff,
kSetVelocity,
kSetDuration
};
- (void)barPropertyAction:(int)action withParam:(NSNumber *)param
{
switch (action) {
case kSetPlaybackType:
playbackType = [param intValue];
if (playbackType == kPalindrome){
palindromeDirection = kPalindromeUp;
}
break;
case kSetAllNotesOn:
for (BarNote* note in self.barNoteArray) {
note.noteOn = YES;
}
[self.bar updateWindows];
break;
case kSetAllNotesOff:
for (BarNote* note in self.barNoteArray) {
note.noteOn = NO;
}
[self.bar updateWindows];
break;
case kSetVelocity:
for (BarNote* note in self.barNoteArray) {
note.velocity = [param intValue];
}
break;
case kSetDuration:
for (BarNote* note in self.barNoteArray) {
note.duration = [param floatValue];
}
break;
default:
break;
}
}
Además, una de las cosas que debe hacer es nombrar a la enumeración utilizando un 'typedef' y no usar' int' como un parámetro, cuando una se espera una enumeración especificada. – Sulthan
@Sulthan Yo estaba haciendo eso, como usted comentó: D –
Esto es genial, ¡gracias! He agregado typedef + constant name, y moví los enum defs a un archivo .h. Pude usar typedef en mi método sig. '- (void) barPropertyAction: (kBarProperty) acción conParam: (NSNumber *) param;' –