Так что я хотел бы сделать это:iPhone OS: создание коммутатора оператора, который использует строковые литералы в качестве компараторов вместо целых
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
}
Я пытаюсь оптимизировать этот код, чтобы быть как можно быстрее, потому что его будет вызываться довольно часто.
спасибо,
Ник
Примечание: «обратный вызов» Да, я использую КВО, поэтому я ПОЛУЧАТЬ строку в
Примечание # 2: Так что заставило меня сначала рассмотреть заявление переключателя мое первоначальное внедрение кода было так:
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
Это просто показалось мне очень неэффективным, но, возможно, я ошибаюсь.
вы правы Я havent закодировал его, чтобы посмотреть, есть ли проблема, я просто сел и начал писать оператор switch, когда я хотел полностью внедрить метод, потому что я думал, что это будет намного эффективнее. Кстати: «Приложение для доставки всегда превосходит приложение, все еще находящееся в разработке!» это превосходно! Спасибо за это. Я добавляю еще одну заметку о моей первоначальной реализации, которая заставила меня подвергнуть сомнению эффективность в первую очередь. – nickthedude
Добро пожаловать. Это хороший вопрос по нескольким причинам; строковые операции могут убить производительность, и в реализации постоянной последовательности реализована более тонкая реализация, чем можно было бы себе представить. – bbum