Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Parameter is the type of parameter passed in the selector
- public class ClosureSelector<Parameter> {
- public let selector : Selector
- private let closure : ( Parameter ) -> ()
- init(withClosure closure : @escaping ( Parameter ) -> ()){
- self.selector = #selector(ClosureSelector.target)
- self.closure = closure
- }
- // Unfortunately we need to cast to AnyObject here
- @objc func target( param : AnyObject) {
- closure(param as! Parameter)
- }
- }
- extension UIControl {
- func addTarget(forControlEvents controlEvents : UIControl.Event, withClosure closure : @escaping (UIControl) -> Void) {
- let closureSelector = ClosureSelector<UIControl>(withClosure: closure)
- objc_setAssociatedObject(self, &handle, closureSelector, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
- self.addTarget(closureSelector, action: closureSelector.selector, for: controlEvents)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement