Подтвердить что ты не робот

Какая разница между AnyObject и UIbutton как отправителем?

При определении IBAction есть опция Anyobject и UIButton, как работает, какая разница?

4b9b3361

Ответ 1

Да, оба работают. Разница заключается только в том, что, объявив ее кнопке, вы получаете стандартную ссылку как UIButton вместо AnyObject (или id в Objective-C). Если вы этого не сделали, вам придется делать это вручную внутри кода.

Вы должны предпочесть оставить его в AnyObject, если в действии есть код, который вы хотите вызвать из другого места, а не только действие кнопки.

Например, кнопка обновления, вам может потребоваться обновить программно. Если вы установили свой параметр действия в UIButton, вы должны отправить UIButton (но почему? Вы делаете это программно, верно?). Если это AnyObject, вы можете отправить "я". Который также заставит вас различать, было ли обновление выполнено по действию или программно.

Надеюсь, что это объяснит. Извините за отсутствие кода. Я не очень сильно кодирую Swift. Редактирование приветствуется.

ИЗМЕНИТЬ

Таким образом, даже если это AnyObject, он имеет свои свойства UIButton. Просто введите текст, чтобы использовать их.

Ответ 2

Если вы только собираетесь использовать функцию с UIButton, лучше всего объявить отправителя как UIButton. Это сэкономит вам немного кода, а также сообщит кому-нибудь в будущем, читает ваш код, что вы ожидаете, что функция будет использоваться с UIButton.

Использование AnyObject будет работать, но вам нужно будет сделать if let button = sender as? UIButton { }, чтобы получить к нему доступ в виде кнопки. Этот способ позволяет вам реагировать по-разному в зависимости от того, что на самом деле отправитель, но я не рекомендую это делать.

Ответ 3

Если это anyObject, то он не имеет никаких свойств UIButton. Когда вы нажимаете кнопку и срабатывает IBAction, отправитель содержит информацию о том, что вызвало действие.

Например, для UIButton вы можете запросить текст UIButton при запуске IBAction.

Однако в ситуации, когда IBAction подключен к двум различным элементам управления пользовательским интерфейсом, скажем, кнопка и слайдер, запрашивающий отправителя, когда он имеет тип UIButton (в то время как инициирующий элемент пользовательского интерфейса является UISlider) приведет к сбою программы, Если у вас есть AnyObject, вы сможете проверить, является ли отправитель UIButton или UISlider, а затем что-то делать.

В общем, если вы не заботитесь о отправителе, оставьте его пустым, поэтому люди, читающие ваш код, будут знать, что вы ничего не используете отправителем.