From 00b91695384b0d8d514624f06ec504f240b51aed Mon Sep 17 00:00:00 2001 From: tarunon Date: Thu, 21 Jan 2016 11:27:11 +0900 Subject: [PATCH] Move `rx_lazyInstanceObservable` from NSControl to private NSObject extension. --- RxCocoa/Common/Observables/NSObject+Rx.swift | 18 ++++++++++++++++++ RxCocoa/OSX/NSControl+Rx.swift | 16 ---------------- 2 files changed, 18 insertions(+), 16 deletions(-) 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()