Invoke target action in Swift

swift

Solution

This was answered in the Apple Developer Forums:

Use `UIApplication.sendAction(_:to:from:forEvent:)`. Technically, you should be using that even in Objective-C, because it understands the various kinds of parameters an action can take and passes them for you.

Here's the code I ended up using:

UIApplication.sharedApplication()
    .sendAction(button.action, to: button.target,
                from: self, forEvent: nil)

It has the same effect as @vladof's answer, but it saves allocating the UIControl.

Problem

In Swift, how do I execute the Cocoa target-action pattern with a selector determined at runtime? The specifics at hand: My code receives a `UIBarButtonItem`, and it needs invoke the action that button represents. In Objective-C, it's straightforward: ``` UIBarButtonItem* button = ...; [button.target performSelector: button.action withObject: self]; ``` In Swift, `performSelector:` is not exposed for type/memory safety reasons. I can't create a Swift closure since I don't know the button.action at compile time. Any other technique for invoking the action?

Original source

Related problems