Итак, я хотел бы сделать это:
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
Мне это показалось очень неэффективным, но, возможно, я ошибаюсь.