создать переключатель с неработающим строковым параметром

0

Как создать оператор switch с параметром accept string

-(int)Type:(NSString *)typeName{

    switch (typeName) {
        case @"MEN":
            NSLog(@"MEN");
            break;
        case @"FEMALE":
            NSLog(@"FEMALE");
            break;
        default:
            NSLog(@"FEMALE");
            break;
    }

}

Я тестирую его в php, который отлично работает

$name = "JHON";

switch ($name) {

case "JHON" :
{
echo "Im JHON";
break;
}

case "KIRAN":
{
echo "Im KIRAN";
break;
}

default:{
echo "Im default";
}

}
?>

Случай с переключателем, который принимает строковое условие, не работает объектно-c, его сообщение об ошибке говорит, что оператор требует выражения целочисленного типа. (NSString _string недействителен)

Теги:
switch-statement

3 ответа

2

Ну, ошибка, которую вы получаете, отдает ей, переключиться в объектив-c работает только с целыми числами, а не с строками...

0

Как уже упоминалось, вы обычно не можете использовать switch с вещами, которые не являются целыми (на самых популярных языках программирования, включая Objective-C). Тем не менее, вы можете проверить этот вопрос для того, чтобы приблизиться к синтаксису, не прибегая к if-else.

0

В Objective C вы не можете использовать Strings in Switch, но вы можете сделать это, используя NSDictionary, для ссылки на эту qaru.site/questions/41406/.... Поэтому из ссылки ваш код можно переписать как

typedef void (^CaseBlock)();

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                   ^() { NSLog(@"MEN"); }, @"MEN",
                   ^() { NSLog(@"WOMEN"); }, @"WOMEN",
                   ^() { NSLog(@"MALE"); }, @"MALE",
                   ^() { NSLog(@"FEMALE"); }, @"FEMALE",
                   nil];

CaseBlock c = dict[@"MEN"];
if (c) c(); else { 
   // default: case
   NSLog(@"Female"); 
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню