Domanda

Perché non fa questo lavoro:

NSInteger sectionLocation = 0;
NSInteger sectionTitles = 1;
NSInteger sectionNotifications = 2;

switch (section) {
    case sectionLocation:
        //
        break;
    case sectionTitles:
        //
        break;
    case sectionNotifications:
        // 
        break;
    default:
        //
}

ottengo questo errore di compilazione:

  

errore: etichetta caso non riduce ad una costante intera

Non è possibile usare NSInteger di come questo? Se è così, c'è un altro modo per utilizzare le variabili come i casi in un'istruzione switch? sectionLocation ecc hanno i valori delle variabili.

È stato utile?

Soluzione

Il problema non è il tipo scalare, ma che le etichette di casi possono cambiare valore quando sono variabili del genere.

Per tutti gli effetti, il compilatore compila un'istruzione switch come un insieme di goto. Le etichette non possono essere variabili.

L'uso di un tipo o di #defines enumerato.

Altri suggerimenti

Il motivo è che il compilatore spesso di voler creare una 'tabella di salto' utilizzando il valore switch come la chiave nella quel tavolo e si può fare solo se è acceso un semplice valore intero. Questo dovrebbe lavorare invece:

#define sectionLocation  0
#define sectionTitles  1
#define sectionNotifications 2

int intSection = section;

switch (intSection) {
    case sectionLocation:
        //
        break;
    case sectionTitles:
        //
        break;
    case sectionNotifications:
        // 
        break;
    default:
        //
}

Il problema qui è che si sta utilizzando le variabili. È possibile utilizzare solo le costanti in istruzioni switch.

fare qualcosa di simile

#define SOME_VALUE 1

o

enum Values {
    valuea = 1,
    valueb = 2,
    ...
}

E si sarà in grado di utilizzare valoreA e così via nella vostra istruzione switch.

Se i valori di casi davvero cambiare in fase di esecuzione, questo è ciò che l'if ... else if ... else costrutto if è lì per.

o semplicemente fare questo

switch((int)secion)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top