Ho alcuni UIPopoverViewControllers
che eseguono la messaggistica per delegare UIViewControllers
per passare gli eventi dell'interfaccia utente. Invece di scrivere un metodo separato per ogni evento, ho un metodo nel delegato con un'istruzione switch che determina come gestire l'evento in base a una costante passata (esempio sotto).come condividere costanti (enumerazioni) tra le classi?
Questo è probabilmente un design scadente, ma è quello che mi è venuto in mente. Ho visto la domanda this riguardante enumerazioni o classi statiche ma non ho capito le risposte.
Quindi, ecco cosa sto facendo BAD e c'è un modo per definire l'enumerazione in un posto in modo che non debba mantenere più bit di codice che possono facilmente uscire dalla sincronizzazione?
EDIT Va bene, scavare intorno un po 'di più (+ herehere) vedo che potrei essere sulla strada giusta. Quindi suppongo di aver bisogno di sapere cosa e dove un file implementation
è in 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;
}
}
Inoltre, una delle cose che dobbiamo fare è nominare l'enum utilizzando un 'typedef' e che non utilizzano' int' come parametro, quando un l'enum specificato è previsto. – Sulthan
@Sulthan Lo stavo facendo mentre commentavi: D –
Questo è fantastico - grazie! Ho aggiunto il typedef + nome costante e ho spostato gli enum def in un file .h. È stato in grado di utilizzare il typedef nel mio metodo sig. '- (void) barPropertyAction: (kBarProperty) action withParam: (NSNumber *) param;' –