diff --git a/RxCocoa/Common/Observables/NSObject+Rx.swift b/RxCocoa/Common/Observables/NSObject+Rx.swift index d2dec6d1..525ed4f3 100644 --- a/RxCocoa/Common/Observables/NSObject+Rx.swift +++ b/RxCocoa/Common/Observables/NSObject+Rx.swift @@ -220,3 +220,21 @@ extension NSObject { return result } } + +extension NSObject { + /** + Helper to make sure that `Observable` returned from `createCachedObservable` is only created once. + This is important because there is only one `target` and `action` properties on `NSControl` or `UIBarButtonItem`. + */ + func rx_lazyInstanceObservable(key: UnsafePointer, createCachedObservable: () -> T) -> T { + if let value = objc_getAssociatedObject(self, key) { + return value as! T + } + + let observable = createCachedObservable() + + objc_setAssociatedObject(self, key, observable, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) + + return observable + } +} \ No newline at end of file diff --git a/RxCocoa/OSX/NSControl+Rx.swift b/RxCocoa/OSX/NSControl+Rx.swift index d728e847..7380a2e2 100644 --- a/RxCocoa/OSX/NSControl+Rx.swift +++ b/RxCocoa/OSX/NSControl+Rx.swift @@ -43,22 +43,6 @@ extension NSControl { return ControlEvent(events: source) } - /** - Helper to make sure that `Observable` returned from `createCachedObservable` is only created once. - This is important because on OSX there is only one `target` and `action` properties on `NSControl`. - */ - func rx_lazyInstanceObservable(key: UnsafePointer, createCachedObservable: () -> T) -> T { - if let value = objc_getAssociatedObject(self, key) { - return value as! T - } - - let observable = createCachedObservable() - - objc_setAssociatedObject(self, key, observable, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - - return observable - } - func rx_value(getter getter: () -> T, setter: T -> Void) -> ControlProperty { MainScheduler.ensureExecutingOnScheduler()