有没有一种更聪明的方法来重写这个?
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];
}
发布于 2011-11-17 11:30:26
不幸的是,他们不能。这是对switch语句的最好和最受欢迎的利用之一,所以希望他们(现在)能跟上Java (和其他语言)的潮流!
如果您正在使用卡片名称,可能需要为每个卡片对象分配一个整数值,然后打开该值。或者可能是一个枚举,它被认为是一个数字,因此可以被打开。
例如:
typedef enum{
Ace, Two, Three, Four, Five ... Jack, Queen, King
} CardType;
这样做,Ace将等于case 0,2等于case 1,依此类推。
发布于 2012-04-17 00:26:16
您可以设置块的字典,如下所示:
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"); }
希望苹果能教“切换”一些新的技巧。
发布于 2013-09-10 09:46:43
对我来说,一个很好的简单的方法:
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;
}
https://stackoverflow.com/questions/8161737
复制相似问题