Я хочу подключить UIButton к фрагменту кода - из того, что я нашел, предпочтительный метод для этого в Swift по-прежнему использует функцию addTarget(target: AnyObject?, action: Selector, forControlEvents: UIControlEvents)
. Это использует конструкцию Selector
, предположительно, для обратной совместимости с библиотеками Obj-C. Я думаю, что я понимаю причину @selector
в Obj-C - возможность ссылаться на метод, поскольку в Obj-C-методах не являются первоклассными значениями.
Однако в Swift функции являются первоклассными значениями. Есть ли способ подключить UIButton к закрытию, что-то похожее на это:
// -- Some code here that sets up an object X
let buttonForObjectX = UIButton()
// -- configure properties here of the button in regards to object
// -- for example title
buttonForObjectX.addAction(action: {() in
// this button is bound to object X, so do stuff relevant to X
}, forControlEvents: UIControlEvents.TouchUpOutside)
Насколько мне известно, вышеизложенное в настоящее время невозможно. Учитывая, что Swift выглядит так, чтобы быть достаточно функциональным, почему? Эти два варианта могут явно сосуществовать для обратной совместимости. Почему это не похоже на onClick() в JS? Кажется, что единственный способ подключить UIButton к паре целевого действия - использовать что-то, что существует исключительно для соображений обратной совместимости (Selector
).
Моим вариантом использования является создание UIButtons в цикле для разных объектов, а затем привязка каждого из них до закрытия. (Установка тега/поиск в словаре/подклассе UIButton - грязные полурешения, но мне интересно, как это сделать, например, этот подход закрытия)