      
      - returns: An initialized UIControl.
      */
-    public init(frame: CGRect, actionClosure: () -> Void) {
+    public convenience init(frame: CGRect, actionClosure: () -> Void) {
         self.init(frame: frame)
         action = Action(action: actionClosure)
         addTarget(self, action: #selector(handleAction), forControlEvents: .TouchUpInside)

        self.action = action
    }
}

private struct AssociatedKeys {
    static var ActionName = "action"
}

@objc public protocol ActionSelectable {
    func handleAction()
}

extension UIControl: ActionSelectable, Actionable {
    public func handleAction() {
        assert(self.action != nil, "Action caught but action closure missing for control: \(self.dynamicType)")
        guard let action = self.action else { return }
        action.action()
    }
}

// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

private struct AssociatedKeys {
    static var ActionName = "action"
}

extension UIControl {
    
    private var action: Action? {
        set { objc_setAssociatedObject(self, &AssociatedKeys.ActionName, newValue, .OBJC_ASSOCIATION_RETAIN) }
