C开启NSString?

有没有更聪明的方法来重写?

if ([cardName isEqualToString:@"Six"]) {
    [self setValue:6];
} else if ([cardName isEqualToString:@"Seven"]) {
    [self setValue:7];
} else if ([cardName isEqualToString:@"Eight"]) {
    [self setValue:8];
} else if ([cardName isEqualToString:@"Nine"]) {
    [self setValue:9];
} 

不幸的是,他们不能。 这是开关语句最好且最受追捧的应用之一,所以希望他们能够跳上Java(和其他)的流行!

如果你正在做卡片名称,可能为每个卡片对象分配一个整数值并打开它。 或者可能是一个枚举,它被认为是一个数字,因此可以被切换。

例如

typedef enum{
  Ace, Two, Three, Four, Five ... Jack, Queen, King

} CardType;

完成这种方式,Ace将等于情况0,两个作为情况1等。


你可以设置一个块的字典,如下所示:

NSString *lookup = @"Hearts"; // The value you want to switch on

typedef void (^CaseBlock)();

// Squint and this looks like a proper switch!
NSDictionary *d = @{
    @"Diamonds": 
    ^{ 
        NSLog(@"Riches!"); 
    },
    @"Hearts":
    ^{ 
        self.hearts++;
        NSLog(@"Hearts!"); 
    },
    @"Clubs":
    ^{ 
        NSLog(@"Late night coding > late night dancing"); 
    },
    @"Spades":
    ^{ 
        NSLog(@"I'm digging it"); 
    }
};

((CaseBlock)d[lookup])(); // invoke the correct block of code

要有“默认”部分,请将最后一行替换为:

CaseBlock c = d[lookup];
if (c) c(); else { NSLog(@"Joker"); }

希望苹果会教授“转换”一些新的技巧。


对我来说,一个简单的方法:

NSString *theString = @"item3";   // The one we want to switch on
NSArray *items = @[@"item1", @"item2", @"item3"];
int item = [items indexOfObject:theString];
switch (item) {
    case 0:
       // Item 1
       break;
    case 1:
       // Item 2
       break;
    case 2:
       // Item 3
       break;
    default:
       break;
}
链接地址: http://www.djcxy.com/p/84273.html

上一篇: C switch on NSString?

下一篇: How to run node.js in my web site server not my pc local server