При использовании UIActionSheet в приложении для iPhone типичные методы сопоставления действий с кнопками кажутся очень хрупкими и эстетически неприятными. Возможно, это из-за моего минимального опыта в C / C ++ (больше Perl, Java, Lisp и других). Совпадение по индексам кнопок кажется слишком большим количеством магических чисел и слишком отсоединено, чтобы избежать простых логических ошибок или ошибок согласованности.
Например,
UIActionSheet *sources = [[UIActionSheet alloc]
initWithTitle:@"Social Networks"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Twitter", @"Facebook", @"Myspace", @"LinkedIn", @"BlahBlah", nil
];
<snip>
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex == [actionSheet cancelButtonIndex]) {
// all done
} else if (buttonIndex == 0) {
// Twitter
} else if (buttonIndex == 1) {
// Facebook
} else if (buttonIndex == 2) {
// LinkedIn
} else if (buttonIndex == 3) {
// Myspace
}
}
Обратите внимание, что в коде обработки действий есть как минимум две ошибки (по крайней мере, согласно комментариям).
Чего мне не хватает, так это правильного шаблона проектирования, позволяющего избежать отключения в Objective-C. Если бы это был Perl, я сначала создал бы массив параметров моей кнопки, а затем, вероятно, создал бы хеш таблицы быстрого поиска, который бы соответствовал другой таблице поиска объектов или подпрограмм, которые выполняли соответствующие действия для каждого элемента. В java исходный список, вероятно, будет в первую очередь объектами с обратными вызовами. Я знаю, что мог бы создать словарь для имитации хэша perl, но это кажется очень громоздким и громоздким для 3-4 вариантов. Я также подумал об использовании enum для маскировки волшебства индексов, но это лишь малая часть проблемы.
Реальная проблема заключается в том, что нет (простого?) Способа указать ОБА список строк кнопок и соответствующих действий в одном месте, тем самым устраняя необходимость в изменении кода в двух местах при добавлении / удалении / переупорядочении параметров и, таким образом, фактически исключая ошибки, которые допускает мой пример кода.
Я не пытаюсь начать священную войну языка программирования, я просто хочу выяснить, каков правильный шаблон проектирования в этом сценарии (и я верю многим другим в Задаче C) для соединения списка строк кнопок со списком действия.