Какой лучший способ назвать ibaction из-за кода?
-
04-10-2019 - |
Вопрос
Сказать, например, у меня есть Ибция это подключено к Uibutton в интерфейсе строитель.
- (IBAction)functionToBeCalled:(id)sender
{
// do something here
}
С моим кодом, скажем, например, в другом методе, какой лучший способ назвать это Ибция?
Если я попытаюсь назвать это так, я получаю ошибку:
[self functionToBeCalled:];
Но, если я попытаюсь назвать это так, как это (мошенничество, я думаю), он работает нормально:
[self functionToBeCalled:0];
Какой правильный способ назвать это правильно?
Решение
Правильный путь - это либо:
- [self functionToBeCalled:nil]
Передать отправителю Nil, указывая на то, что он не был вызван по обычной структуре.
ИЛИ
- [self functionToBeCalled:self]
Пройти самостоятельно отправителя, который также правильный.
Какой из них для того, чтобы выбрать, зависит от того, что именно функция делает, и то, что она ожидает, что отправитель будет.
Другие советы
Семантически говоря, вызывая IBAction
должны быть запущены только по событиям UI (например, кнопка нажатия). Если вам нужно запустить один и тот же код из нескольких мест, вы можете извлечь этот код из IBAction
в выделенный метод и вызовите этот метод из обоих мест:
- (IBAction)onButtonTap:(id)sender {
[self doSomething];
}
Это позволяет вам делать дополнительную логику на основе отправителя (возможно, вы можете назначить то же действие для нескольких кнопок и решать, что делать на основе sender
параметр). А также уменьшает количество кода, которое вам нужно написать в IBAction
(что удерживает реализацию вашего контроллера).