Подключить UIB для закрытия? (Свифт, цель-действие)
Я хочу подключить 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
).
Мой вариант использования - создать UIB-кнопки в цикле для разных объектов, а затем подключить каждый к замыканию. (Установка тега / поиск в словаре / подкласс UIButton - грязные полу-решения, но меня интересует, как сделать это функционально, то есть этот подход закрытия)