2010-08-09 14 views
2

J'essaie d'obtenir une valeur d'une chaîne appartenant à un typedef enum dans Obj C mais je ne semble pas capable d'extraire la valeur de NSString. I'me faire quelque chose comme ceci:Commutateur avec type typedef enum de la chaîne

typedef enum{ 
    S, 
    M, 
    L 
} Size; 

-(void)function:(NSString *)var{ 
Size value=[var value]; 
swicth(value){ 
    case S:... 
    case M:... 
    ... 
} 
} 

EDIT: Le contenu de la chaîne serait quelque chose comme br @ "S" @ "M" @ "L"

Je ne vois pas comment peut J'accomplis cela.

Répondre

0

Il n'est pas clair ce que contient la chaîne. Est-ce @"S", @"M" ou @"L"? Si c'est le cas, vous devez fournir votre propre conversion aux valeurs de l'énumération Size. Ou vous pouvez utiliser simplement comparaison de chaînes dans votre méthode:

if ([var isEqualToString: @"S"]) { 
    // ... 
} else if ([var isEqualToString: @"M"]) { 
    //... 
} ... 

Cependant, si la chaîne contient la valeur numérique de l'une des entrées Size (comme @"0", @"1" ou @"2") vous pouvez utiliser la méthode -intValue pour faites la comparaison que vous avez écrite dans la question.

+0

Je suis désolé je ne suis pas clair sur le contenu de la chaîne, oui, ils seraient @ "S" @ "M" @ "L" et en utilisant si autre serait vaincre le but de l'utilisation d'un commutateur. –

2

En supposant que vous savez que les chaînes sont de longueur, vous pouvez passer sur la unichar à la position 0.

switch ([string characterAtIndex:0]) { 
case 'S': ... 
case 'L': ... 
case 'M': ... 
}