Значение перечисления 'SHKShareTypeUndefined' не обработано в switch - PullRequest
15 голосов
/ 09 августа 2011

Я получаю предупреждение Значение перечисления 'SHKShareTypeUndefined', не обработанное переключателем в приведенном ниже коде. Я выделил соответствующую строку и указатель:

    + (NSArray *)favoriteSharersForType:(SHKShareType)type
{   
    NSArray *favoriteSharers = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%i", SHK_FAVS_PREFIX_KEY, type]];

    // set defaults
    if (favoriteSharers == nil)
    {
        switch (type) 
        {
            case SHKShareTypeURL:
                favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil];
                break;

            case SHKShareTypeImage:
                favoriteSharers = [NSArray arrayWithObjects:@"SHKMail",@"SHKFacebook",@"SHKCopy",nil];
                break;

            case SHKShareTypeText:
                favoriteSharers = [NSArray arrayWithObjects:@"SHKMail",@"SHKTwitter",@"SHKFacebook", nil];
                break;

            case SHKShareTypeFile:
                favoriteSharers = [NSArray arrayWithObjects:@"SHKMail", nil];
                break;

            case SHKShareTypeUndefined:         
                break;
        }

        // Save defaults to prefs
        [self setFavorites:favoriteSharers forType:type];
    }

Это предупреждение в ShareKit, и я не уверен, как его исправить.

Спасибо!

Ответы [ 3 ]

29 голосов
/ 09 августа 2011

Добавить фиктивный регистр для этого значения перечисления:

case SHKShareTypeUndefined:         
     break;

Или установите для своего флага «Проверка операторов выписки» значение «НЕТ» в целевых настройках (раздел предупреждений)

17 голосов
/ 08 октября 2011

Вы также можете использовать default чехол:

switch (type) {
        case SHKShareTypeURL:
            favoriteSharers = ...
            break;

        // ...

        default:
           NSLog(@"Unexpected case - will do nothing here");
           break;
} 
4 голосов
/ 09 января 2013

Если у вас есть причина не хотеть ни добавлять регистры для всех значений перечисления, ни добавлять регистр по умолчанию, и если вы компилируете с помощью clang, вы можете написать

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wswitch"

switch (type) {
    //...
}

#pragma clang diagnostic pop
...