15

以下のコードで警告列挙値 '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 にあり、修正方法がわかりません。

ありがとう!

4

3 に答える 3

29

その列挙値のダミー ケースを追加します。

case SHKShareTypeUndefined:         
     break;

または、ターゲット設定で「Check switch statement」フラグを NO に設定します (警告セクション)。

于 2011-08-09T12:24:53.580 に答える
17

defaultケース を使用することもできます。

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

        // ...

        default:
           NSLog(@"Unexpected case - will do nothing here");
           break;
} 
于 2011-10-08T12:37:33.960 に答える
4

enum のすべての値に対してケースを追加したくない場合や、デフォルトのケースを追加したくない理由があり、clang でコンパイルしている場合は、次のように記述できます。

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

switch (type) {
    //...
}

#pragma clang diagnostic pop
于 2013-01-08T22:14:13.803 に答える