Во-первых, вам не нужно указывать заголовок. Это (сейчас) законно:
let action = UIAction { action in
print("howdy!")
}
button.addAction(action, for: .touchUpInside)
Во-вторых, вам действительно не нужна отдельная строка для определения действия, поэтому вы можете сказать следующее:
button.addAction(.init { action in
print("howdy!")
}, for: .touchUpInside)
Однако это до сих пор бесит, потому что теперь у меня закрытие в середине вызова addAction
. Это должно быть закрытие в конце ! Очевидное решение - расширение:
extension UIControl {
func addAction(for event: UIControl.Event, handler: @escaping UIActionHandler) {
self.addAction(UIAction(handler:handler), for:event)
}
}
Проблема решена! Теперь я могу говорить так, как мне должно было быть разрешено все это время:
button.addAction(for: .touchUpInside) { action in
print("howdy!")
}
[Дополнительная информация: Где sender
в этой истории? Это внутри акции . UIAction имеет свойство sender
. Итак, в этом коде action.sender
- это UIButton.]