所以我想这样做:
switch (keyPath) {
case @"refreshCount":
//do stuff
case @"timesLaunched":
//do other stuff
}
但显然你只能使用整数作为开关量。这样做的唯一方法是将字符串解析为整数标识符然后运行 switch 语句吗?
像这样:
nsinteger num = nil;
if (keyPath isEqual:@"refreshCount") {
num = 0
}
if (keyPath isEqual:@"timesLaunched") {
num = 1
}
我正在尝试优化此代码以使其尽可能快,因为它会经常被调用。
谢谢,
缺口
注意:是的,我正在使用 KVO,所以我在“回调”中接收到一个字符串。
注意 #2:所以让我首先考虑 switch 语句的是我的原始代码实现是这样的:
if ([keyPath isEqual:@"refreshCount"] && ([[change valueForKey:@"new"] intValue] == 10)) { //
NSLog(@"achievemnt hit inside");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"Achievement Unlocked!" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:nil];
[alert show];
我想用相同的方法用不同的 XX 值做一堆这些:
if ([keyPath isEqual:@"refreshCount"] && ([[change valueForKey:@"new"] intValue] == 10)) {
//unlock small achievement
}
if ([keyPath isEqual:@"refreshCount"] && ([[change valueForKey:@"new"] intValue] == 50)) {
//unlock bigger achievement
}
//etc
这对我来说似乎效率很低,但也许我错了。