Я пишу некоторый код Objective-C и часто сталкиваюсь с ситуацией, когда мне приходится использовать переменную класса для хранения значения для однократного использования. После употребления он мне больше не нужен. Для меня хранение этого значения в переменной класса похоже на запах кода. На самом деле значение должно быть передано в качестве параметра для методов, которые я использую.
Обычно я сталкиваюсь с этим, когда принимаю делегатов. Например, у меня есть пользовательский интерфейс с несколькими кнопками, которые используются для загрузки и отображения UIActionSheet
, когда они касаются. Этот лист действий содержит средство выбора даты, которое устанавливает значение для UILabel
при отклонении листа действий.
- (IBAction)setPurchaseDateTapped {
self.activeField = purchaseDate;
[self loadDatePickerActionSheet:@"Edit Purchase Date"];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
self.activeField.text = value_from_UIActionSheet;
}
Как вы можете видеть здесь, обратный вызов actionSheet clickedButtonAtIndex не позволяет мне передавать activeField
, поэтому я должен использовать переменную класса. Кажется более правильным написать это:
- (void)actionSheet:(UIActionSheet *)actionSheet parameterValue:(id)parameter {
parameter.text = value_from_UIActionSheet;
}
Я полагаю (?), Что я могу создать подкласс делегата UIActionSheet и UIActionSheet и добавить необходимые мне подписи, но, опять же, это требует больше усилий, чем оно того стоит.
Итак, мой вопрос: как лучше всего делать то, что я пытаюсь сделать?
Я не обязательно хочу изменять созданный мной интерфейс выбора даты / листа действий (хотя, если есть более удобный шаблон для установки нескольких дат в UIView при одновременном исключении DatePicker, я полностью уши.)