implement DelegateProxy factory

This commit is contained in:
tarunon 2017-06-17 01:20:54 +09:00
parent 16eabd5ea4
commit 3fba185b96
29 changed files with 141 additions and 296 deletions

View File

@ -188,13 +188,6 @@ open class DelegateProxy : _RXDelegateProxy {
return delegateAssociatedTag return delegateAssociatedTag
} }
/// Initializes new instance of delegate proxy.
///
/// - returns: Initialized instance of `self`.
open class func createProxyForObject(_ object: AnyObject) -> AnyObject {
return self.init(parentObject: object)
}
/// Returns assigned proxy for object. /// Returns assigned proxy for object.
/// ///
/// - parameter object: Object that can have assigned delegate proxy. /// - parameter object: Object that can have assigned delegate proxy.

View File

@ -69,22 +69,25 @@ every view has a corresponding delegate virtual factory method.
In case of UITableView / UIScrollView, there is In case of UITableView / UIScrollView, there is
extension UIScrollView { RxScrollViewDelegateProxy has factories that contains RxScrollViewDelegateProxy(parentObject: parentObject)
public func createRxDelegateProxy() -> RxScrollViewDelegateProxy { ....
return RxScrollViewDelegateProxy(parentObject: base)
and extend it
RxScrollViewDelegateProxy.extend { (parentObject: UITableView) in
RxTableViewDelegateProxy(parentObject: parentObject)
} }
....
and override in UITableView
extension UITableView {
public override func createRxDelegateProxy() -> RxScrollViewDelegateProxy {
....
*/ */
public protocol DelegateProxyType : AnyObject { public protocol DelegateProxyType : AnyObject {
/// DelegateProxy factory
static var factories: [((AnyObject) -> AnyObject?)] { get set }
/// Extend DelegateProxy for specific subclass
static func extend<Object: AnyObject>(with factory: @escaping ((Object) -> AnyObject))
/// Creates new proxy for target object. /// Creates new proxy for target object.
static func createProxyForObject(_ object: AnyObject) -> AnyObject static func createProxyForObject(_ object: AnyObject) -> AnyObject
@ -210,6 +213,14 @@ extension DelegateProxyType {
proxy.setForwardToDelegate(nil, retainDelegate: retainDelegate) proxy.setForwardToDelegate(nil, retainDelegate: retainDelegate)
} }
} }
public static func extend<Object: AnyObject>(with factory: @escaping ((Object) -> AnyObject)) {
factories.append({ ($0 as? Object).map(factory) })
}
public static func createProxyForObject(_ object: AnyObject) -> AnyObject {
return factories.reversed().reduce(AnyObject?.none) { $0 ?? $1(object) }!
}
} }
#if os(iOS) || os(tvOS) #if os(iOS) || os(tvOS)

View File

@ -12,15 +12,6 @@
#endif #endif
import UIKit import UIKit
extension NSTextStorage {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxTextStorageDelegateProxy {
return RxTextStorageDelegateProxy(parentObject: self)
}
}
extension Reactive where Base: NSTextStorage { extension Reactive where Base: NSTextStorage {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -37,6 +37,10 @@ public class RxCollectionViewDataSourceProxy
, UICollectionViewDataSource , UICollectionViewDataSource
, DelegateProxyType { , DelegateProxyType {
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxCollectionViewDataSourceProxy(parentObject: $0) }
]
/// Typed parent object. /// Typed parent object.
public weak private(set) var collectionView: UICollectionView? public weak private(set) var collectionView: UICollectionView?
@ -64,12 +68,6 @@ public class RxCollectionViewDataSourceProxy
// MARK: proxy // MARK: proxy
/// For more information take a look at `DelegateProxyType`.
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let collectionView: UICollectionView = castOrFatalError(object)
return collectionView.createRxDataSourceProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public override class func delegateAssociatedObjectTag() -> UnsafeRawPointer { public override class func delegateAssociatedObjectTag() -> UnsafeRawPointer {
return dataSourceAssociatedTag return dataSourceAssociatedTag

View File

@ -19,6 +19,10 @@
, UINavigationControllerDelegate , UINavigationControllerDelegate
, DelegateProxyType { , DelegateProxyType {
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxNavigationControllerDelegateProxy(parentObject: $0) }
]
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
let navigationController: UINavigationController = castOrFatalError(object) let navigationController: UINavigationController = castOrFatalError(object)
@ -30,12 +34,6 @@
let navigationController: UINavigationController = castOrFatalError(object) let navigationController: UINavigationController = castOrFatalError(object)
navigationController.delegate = castOptionalOrFatalError(delegate) navigationController.delegate = castOptionalOrFatalError(delegate)
} }
/// For more information take a look at `DelegateProxyType`.
open override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let navigationController: UINavigationController = castOrFatalError(object)
return navigationController.createRxDelegateProxy()
}
} }
#if os(iOS) #if os(iOS)

View File

@ -18,11 +18,9 @@
, DelegateProxyType , DelegateProxyType
, UIPickerViewDelegate { , UIPickerViewDelegate {
/// For more information take a look at `DelegateProxyType`. public static var factories: [((AnyObject) -> AnyObject?)] = [
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { { RxPickerViewDelegateProxy(parentObject: $0) }
let pickerView: UIPickerView = castOrFatalError(object) ]
return pickerView.createRxDelegateProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {

View File

@ -19,6 +19,13 @@ public class RxScrollViewDelegateProxy
, UIScrollViewDelegate , UIScrollViewDelegate
, DelegateProxyType { , DelegateProxyType {
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxScrollViewDelegateProxy(parentObject: $0) },
{ ($0 as? UITableView).map { RxTableViewDelegateProxy(parentObject: $0) } },
{ ($0 as? UICollectionView).map { RxCollectionViewDelegateProxy(parentObject: $0) } },
{ ($0 as? UITextView).map { RxTextViewDelegateProxy(parentObject: $0) } }
]
fileprivate var _contentOffsetBehaviorSubject: BehaviorSubject<CGPoint>? fileprivate var _contentOffsetBehaviorSubject: BehaviorSubject<CGPoint>?
fileprivate var _contentOffsetPublishSubject: PublishSubject<()>? fileprivate var _contentOffsetPublishSubject: PublishSubject<()>?
@ -72,12 +79,6 @@ public class RxScrollViewDelegateProxy
// MARK: delegate proxy // MARK: delegate proxy
/// For more information take a look at `DelegateProxyType`.
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let scrollView: UIScrollView = castOrFatalError(object)
return scrollView.createRxDelegateProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
let scrollView: UIScrollView = castOrFatalError(object) let scrollView: UIScrollView = castOrFatalError(object)

View File

@ -19,6 +19,12 @@ public class RxSearchBarDelegateProxy
, UISearchBarDelegate , UISearchBarDelegate
, DelegateProxyType { , DelegateProxyType {
// MARK: Delegate proxy methods
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxSearchBarDelegateProxy(parentObject: $0) }
]
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
let searchBar: UISearchBar = castOrFatalError(object) let searchBar: UISearchBar = castOrFatalError(object)
@ -30,17 +36,6 @@ public class RxSearchBarDelegateProxy
let searchBar: UISearchBar = castOrFatalError(object) let searchBar: UISearchBar = castOrFatalError(object)
searchBar.delegate = castOptionalOrFatalError(delegate) searchBar.delegate = castOptionalOrFatalError(delegate)
} }
// MARK: Delegate proxy methods
#if os(iOS)
/// For more information take a look at `DelegateProxyType`.
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let searchBar: UISearchBar = castOrFatalError(object)
return searchBar.createRxDelegateProxy()
}
#endif
} }
#endif #endif

View File

@ -20,11 +20,9 @@ public class RxSearchControllerDelegateProxy
, DelegateProxyType , DelegateProxyType
, UISearchControllerDelegate { , UISearchControllerDelegate {
/// For more information take a look at `DelegateProxyType`. public static var factories: [((AnyObject) -> AnyObject?)] = [
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { { RxSearchControllerDelegateProxy(parentObject: $0) }
let pickerView: UISearchController = castOrFatalError(object) ]
return pickerView.createRxDelegateProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {

View File

@ -19,6 +19,10 @@ public class RxTabBarControllerDelegateProxy
, UITabBarControllerDelegate , UITabBarControllerDelegate
, DelegateProxyType { , DelegateProxyType {
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxTabBarControllerDelegateProxy(parentObject: $0) }
]
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
let tabBarController: UITabBarController = castOrFatalError(object) let tabBarController: UITabBarController = castOrFatalError(object)
@ -30,12 +34,6 @@ public class RxTabBarControllerDelegateProxy
let tabBarController: UITabBarController = castOrFatalError(object) let tabBarController: UITabBarController = castOrFatalError(object)
tabBarController.delegate = castOptionalOrFatalError(delegate) tabBarController.delegate = castOptionalOrFatalError(delegate)
} }
/// For more information take a look at `DelegateProxyType`.
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let tabBarController: UITabBarController = castOrFatalError(object)
return tabBarController.createRxDelegateProxy()
}
} }
#endif #endif

View File

@ -19,6 +19,10 @@ public class RxTabBarDelegateProxy
, UITabBarDelegate , UITabBarDelegate
, DelegateProxyType { , DelegateProxyType {
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxTabBarDelegateProxy(parentObject: $0) }
]
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
let tabBar: UITabBar = castOrFatalError(object) let tabBar: UITabBar = castOrFatalError(object)
@ -30,13 +34,6 @@ public class RxTabBarDelegateProxy
let tabBar: UITabBar = castOrFatalError(object) let tabBar: UITabBar = castOrFatalError(object)
tabBar.delegate = castOptionalOrFatalError(delegate) tabBar.delegate = castOptionalOrFatalError(delegate)
} }
/// For more information take a look at `DelegateProxyType`.
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let tabBar: UITabBar = castOrFatalError(object)
return tabBar.createRxDelegateProxy()
}
} }
#endif #endif

View File

@ -34,6 +34,10 @@ public class RxTableViewDataSourceProxy
, UITableViewDataSource , UITableViewDataSource
, DelegateProxyType { , DelegateProxyType {
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxTableViewDataSourceProxy(parentObject: $0) }
]
/// Typed parent object. /// Typed parent object.
public weak fileprivate(set) var tableView: UITableView? public weak fileprivate(set) var tableView: UITableView?
@ -61,12 +65,6 @@ public class RxTableViewDataSourceProxy
// MARK: proxy // MARK: proxy
/// For more information take a look at `DelegateProxyType`.
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let tableView: UITableView = castOrFatalError(object)
return tableView.createRxDataSourceProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public override class func delegateAssociatedObjectTag() -> UnsafeRawPointer { public override class func delegateAssociatedObjectTag() -> UnsafeRawPointer {
return dataSourceAssociatedTag return dataSourceAssociatedTag

View File

@ -18,11 +18,9 @@
, DelegateProxyType , DelegateProxyType
, NSTextStorageDelegate { , NSTextStorageDelegate {
/// For more information take a look at `DelegateProxyType`. public static var factories: [((AnyObject) -> AnyObject?)] = [
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { { RxTextStorageDelegateProxy(parentObject: $0) }
let pickerView: NSTextStorage = castOrFatalError(object) ]
return pickerView.createRxDelegateProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {

View File

@ -18,11 +18,9 @@ public class RxWebViewDelegateProxy
, DelegateProxyType , DelegateProxyType
, UIWebViewDelegate { , UIWebViewDelegate {
/// For more information take a look at `DelegateProxyType`. public static var factories: [((AnyObject) -> AnyObject?)] = [
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject { { RxWebViewDelegateProxy(parentObject: $0) }
let pickerView: UIWebView = castOrFatalError(object) ]
return pickerView.createRxDelegateProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) { public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {

View File

@ -160,17 +160,6 @@ extension Reactive where Base: UICollectionView {
} }
} }
extension UICollectionView {
/// Factory method that enables subclasses to implement their own `rx.dataSource`.
///
/// - returns: Instance of delegate proxy that wraps `dataSource`.
public func createRxDataSourceProxy() -> RxCollectionViewDataSourceProxy {
return RxCollectionViewDataSourceProxy(parentObject: self)
}
}
extension Reactive where Base: UICollectionView { extension Reactive where Base: UICollectionView {
/// Reactive wrapper for `dataSource`. /// Reactive wrapper for `dataSource`.

View File

@ -13,15 +13,6 @@ import RxSwift
#endif #endif
import UIKit import UIKit
extension UINavigationController {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxNavigationControllerDelegateProxy {
return RxNavigationControllerDelegateProxy(parentObject: self)
}
}
extension Reactive where Base: UINavigationController { extension Reactive where Base: UINavigationController {
public typealias ShowEvent = (viewController: UIViewController, animated: Bool) public typealias ShowEvent = (viewController: UIViewController, animated: Bool)

View File

@ -13,17 +13,6 @@
#endif #endif
import UIKit import UIKit
extension UIPickerView {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxPickerViewDelegateProxy {
return RxPickerViewDelegateProxy(parentObject: self)
}
}
extension Reactive where Base: UIPickerView { extension Reactive where Base: UIPickerView {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -14,26 +14,6 @@
import UIKit import UIKit
extension UIScrollView {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxScrollViewDelegateProxy {
switch self {
case self as UICollectionView:
return RxCollectionViewDelegateProxy(parentObject: self)
case self as UITableView:
return RxTableViewDelegateProxy(parentObject: self)
case self as UITextView:
return RxTextViewDelegateProxy(parentObject: self)
default:
return RxScrollViewDelegateProxy(parentObject: self)
}
}
}
extension Reactive where Base: UIScrollView { extension Reactive where Base: UIScrollView {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -13,19 +13,6 @@ import RxSwift
#endif #endif
import UIKit import UIKit
#if os(iOS)
extension UISearchBar {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxSearchBarDelegateProxy {
return RxSearchBarDelegateProxy(parentObject: self)
}
}
#endif
extension Reactive where Base: UISearchBar { extension Reactive where Base: UISearchBar {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -13,15 +13,6 @@
#endif #endif
import UIKit import UIKit
extension UISearchController {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxSearchControllerDelegateProxy {
return RxSearchControllerDelegateProxy(parentObject: self)
}
}
@available(iOS 8.0, *) @available(iOS 8.0, *)
extension Reactive where Base: UISearchController { extension Reactive where Base: UISearchController {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -70,16 +70,6 @@ extension Reactive where Base: UITabBar {
/** /**
iOS and tvOS iOS and tvOS
*/ */
extension UITabBar {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxTabBarDelegateProxy {
return RxTabBarDelegateProxy(parentObject: self)
}
}
extension Reactive where Base: UITabBar { extension Reactive where Base: UITabBar {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -58,16 +58,6 @@ extension Reactive where Base: UITabBarController {
/** /**
iOS and tvOS iOS and tvOS
*/ */
extension UITabBarController {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxTabBarControllerDelegateProxy {
return RxTabBarControllerDelegateProxy(parentObject: self)
}
}
extension Reactive where Base: UITabBarController { extension Reactive where Base: UITabBarController {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -165,19 +165,6 @@ extension Reactive where Base: UITableView {
} }
extension UITableView {
/**
Factory method that enables subclasses to implement their own `rx.dataSource`.
- returns: Instance of delegate proxy that wraps `dataSource`.
*/
public func createRxDataSourceProxy() -> RxTableViewDataSourceProxy {
return RxTableViewDataSourceProxy(parentObject: self)
}
}
extension Reactive where Base: UITableView { extension Reactive where Base: UITableView {
/** /**
Reactive wrapper for `dataSource`. Reactive wrapper for `dataSource`.

View File

@ -14,17 +14,6 @@ import UIKit
import RxSwift import RxSwift
#endif #endif
extension UIWebView {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxWebViewDelegateProxy {
return RxWebViewDelegateProxy(parentObject: self)
}
}
extension Reactive where Base: UIWebView { extension Reactive where Base: UIWebView {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -21,6 +21,10 @@ public class RxTextFieldDelegateProxy
, NSTextFieldDelegate , NSTextFieldDelegate
, DelegateProxyType { , DelegateProxyType {
public static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxTextFieldDelegateProxy(parentObject: $0) }
]
fileprivate let textSubject = PublishSubject<String?>() fileprivate let textSubject = PublishSubject<String?>()
/// Typed parent object. /// Typed parent object.
@ -45,12 +49,6 @@ public class RxTextFieldDelegateProxy
// MARK: Delegate proxy methods // MARK: Delegate proxy methods
/// For more information take a look at `DelegateProxyType`.
public override class func createProxyForObject(_ object: AnyObject) -> AnyObject {
let control: NSTextField = castOrFatalError(object)
return control.createRxDelegateProxy()
}
/// For more information take a look at `DelegateProxyType`. /// For more information take a look at `DelegateProxyType`.
public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? { public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
let textField: NSTextField = castOrFatalError(object) let textField: NSTextField = castOrFatalError(object)
@ -65,16 +63,6 @@ public class RxTextFieldDelegateProxy
} }
extension NSTextField {
/// Factory method that enables subclasses to implement their own `delegate`.
///
/// - returns: Instance of delegate proxy that wraps `delegate`.
public func createRxDelegateProxy() -> RxTextFieldDelegateProxy {
return RxTextFieldDelegateProxy(parentObject: self)
}
}
extension Reactive where Base: NSTextField { extension Reactive where Base: NSTextField {
/// Reactive wrapper for `delegate`. /// Reactive wrapper for `delegate`.

View File

@ -16,6 +16,10 @@ class RxCLLocationManagerDelegateProxy : DelegateProxy
, CLLocationManagerDelegate , CLLocationManagerDelegate
, DelegateProxyType { , DelegateProxyType {
static var factories: [((AnyObject) -> AnyObject?)] = [
{ RxCLLocationManagerDelegateProxy(parentObject: $0) }
]
internal lazy var didUpdateLocationsSubject = PublishSubject<[CLLocation]>() internal lazy var didUpdateLocationsSubject = PublishSubject<[CLLocation]>()
internal lazy var didFailWithErrorSubject = PublishSubject<Error>() internal lazy var didFailWithErrorSubject = PublishSubject<Error>()

View File

@ -32,10 +32,6 @@ class ExtendNSTextFieldDelegateProxy
final class NSTextFieldSubclass final class NSTextFieldSubclass
: NSTextField : NSTextField
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxTextFieldDelegateProxy {
return ExtendNSTextFieldDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }

View File

@ -120,10 +120,6 @@ final class ExtendTableViewDelegateProxy
final class UITableViewSubclass1 final class UITableViewSubclass1
: UITableView : UITableView
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxScrollViewDelegateProxy {
return ExtendTableViewDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -151,9 +147,6 @@ final class ExtendTableViewDataSourceProxy
final class UITableViewSubclass2 final class UITableViewSubclass2
: UITableView : UITableView
, TestDelegateControl { , TestDelegateControl {
override func createRxDataSourceProxy() -> RxTableViewDataSourceProxy {
return ExtendTableViewDataSourceProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
if dataSource != nil { if dataSource != nil {
@ -184,10 +177,6 @@ final class ExtendCollectionViewDelegateProxy
final class UICollectionViewSubclass1 final class UICollectionViewSubclass1
: UICollectionView : UICollectionView
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxScrollViewDelegateProxy {
return ExtendCollectionViewDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -215,9 +204,6 @@ final class ExtendCollectionViewDataSourceProxy
final class UICollectionViewSubclass2 final class UICollectionViewSubclass2
: UICollectionView : UICollectionView
, TestDelegateControl { , TestDelegateControl {
override func createRxDataSourceProxy() -> RxCollectionViewDataSourceProxy {
return ExtendCollectionViewDataSourceProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
if dataSource != nil { if dataSource != nil {
@ -248,10 +234,6 @@ final class ExtendScrollViewDelegateProxy
final class UIScrollViewSubclass final class UIScrollViewSubclass
: UIScrollView : UIScrollView
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxScrollViewDelegateProxy {
return ExtendScrollViewDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -280,11 +262,6 @@ final class ExtendSearchBarDelegateProxy
final class UISearchBarSubclass final class UISearchBarSubclass
: UISearchBar : UISearchBar
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxSearchBarDelegateProxy {
return ExtendSearchBarDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -313,10 +290,6 @@ final class ExtendTextViewDelegateProxy
final class UITextViewSubclass final class UITextViewSubclass
: UITextView : UITextView
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxScrollViewDelegateProxy {
return ExtendTextViewDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -341,11 +314,6 @@ final class ExtendSearchControllerDelegateProxy
final class UISearchControllerSubclass final class UISearchControllerSubclass
: UISearchController : UISearchController
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxSearchControllerDelegateProxy {
return ExtendSearchControllerDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -371,11 +339,6 @@ final class ExtendPickerViewDelegateProxy
final class UIPickerViewSubclass final class UIPickerViewSubclass
: UIPickerView : UIPickerView
, TestDelegateControl { , TestDelegateControl {
public override func createRxDelegateProxy() -> RxPickerViewDelegateProxy {
return ExtendPickerViewDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -400,11 +363,6 @@ final class ExtendWebViewDelegateProxy
} }
final class UIWebViewSubclass: UIWebView, TestDelegateControl { final class UIWebViewSubclass: UIWebView, TestDelegateControl {
override func createRxDelegateProxy() -> RxWebViewDelegateProxy {
return ExtendWebViewDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -437,11 +395,6 @@ final class ExtendTextStorageDelegateProxy
final class NSTextStorageSubclass final class NSTextStorageSubclass
: NSTextStorage : NSTextStorage
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxTextStorageDelegateProxy {
return ExtendTextStorageDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -489,10 +442,6 @@ final class ExtendTabBarDelegateProxy
} }
final class UINavigationControllerSubclass: UINavigationController, TestDelegateControl { final class UINavigationControllerSubclass: UINavigationController, TestDelegateControl {
override func createRxDelegateProxy() -> RxNavigationControllerDelegateProxy {
return ExtendNavigationControllerDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -511,10 +460,6 @@ final class UINavigationControllerSubclass: UINavigationController, TestDelegate
final class UITabBarControllerSubclass final class UITabBarControllerSubclass
: UITabBarController : UITabBarController
, TestDelegateControl { , TestDelegateControl {
override func createRxDelegateProxy() -> RxTabBarControllerDelegateProxy {
return ExtendTabBarControllerDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }
@ -529,10 +474,6 @@ final class UITabBarControllerSubclass
} }
final class UITabBarSubclass: UITabBar, TestDelegateControl { final class UITabBarSubclass: UITabBar, TestDelegateControl {
override func createRxDelegateProxy() -> RxTabBarDelegateProxy {
return ExtendTabBarDelegateProxy(parentObject: self)
}
func doThatTest(_ value: Int) { func doThatTest(_ value: Int) {
(delegate as! TestDelegateProtocol).testEventHappened?(value) (delegate as! TestDelegateProtocol).testEventHappened?(value)
} }

View File

@ -56,6 +56,62 @@ extension TestDelegateControl {
// MARK: Tests // MARK: Tests
final class DelegateProxyTest : RxTest { final class DelegateProxyTest : RxTest {
override func setUp() {
super.setUp()
// setup extending of DelegateProxies
#if os(iOS) || os(tvOS)
RxScrollViewDelegateProxy.extend { (parentObject: UIScrollViewSubclass) in
ExtendScrollViewDelegateProxy(parentObject: parentObject)
}
RxScrollViewDelegateProxy.extend { (parentObject: UITableViewSubclass1) in
ExtendTableViewDelegateProxy(parentObject: parentObject)
}
RxTableViewDataSourceProxy.extend { (parentObject: UITableViewSubclass2) in
ExtendTableViewDataSourceProxy(parentObject: parentObject)
}
RxScrollViewDelegateProxy.extend { (parentObject: UICollectionViewSubclass1) in
ExtendCollectionViewDelegateProxy(parentObject: parentObject)
}
RxCollectionViewDataSourceProxy.extend { (parentObject: UICollectionViewSubclass2) in
ExtendCollectionViewDataSourceProxy(parentObject: parentObject)
}
RxScrollViewDelegateProxy.extend { (parentObject: UITextViewSubclass) in
ExtendTextViewDelegateProxy(parentObject: parentObject)
}
RxTextStorageDelegateProxy.extend { (parentObject: NSTextStorageSubclass) in
ExtendTextStorageDelegateProxy(parentObject: parentObject)
}
RxNavigationControllerDelegateProxy.extend { (parentObject: UINavigationControllerSubclass) in
ExtendNavigationControllerDelegateProxy(parentObject: parentObject)
}
RxTabBarControllerDelegateProxy.extend { (parentObject: UITabBarControllerSubclass) in
ExtendTabBarControllerDelegateProxy(parentObject: parentObject)
}
RxTabBarDelegateProxy.extend { (parentObject: UITabBarSubclass) -> AnyObject in
ExtendTabBarDelegateProxy(parentObject: parentObject)
}
#endif
#if os(iOS)
RxSearchBarDelegateProxy.extend { (parentObject: UISearchBarSubclass) in
ExtendSearchBarDelegateProxy(parentObject: parentObject)
}
RxSearchControllerDelegateProxy.extend { (parentObject: UISearchControllerSubclass) in
ExtendSearchControllerDelegateProxy(parentObject: parentObject)
}
RxPickerViewDelegateProxy.extend { (parentObject: UIPickerViewSubclass) in
ExtendPickerViewDelegateProxy(parentObject: parentObject)
}
RxWebViewDelegateProxy.extend { (parentObject: UIWebViewSubclass) in
ExtendWebViewDelegateProxy(parentObject: parentObject)
}
#endif
#if os(macOS)
RxTextFieldDelegateProxy.extend { (parentObject: NSTextFieldSubclass) in
ExtendNSTextFieldDelegateProxy(parentObject: parentObject)
}
#endif
}
func test_OnInstallDelegateIsRetained() { func test_OnInstallDelegateIsRetained() {
let view = ThreeDSectionedView() let view = ThreeDSectionedView()
let mock = MockThreeDSectionedViewProtocol() let mock = MockThreeDSectionedViewProtocol()
@ -419,6 +475,11 @@ final class ThreeDSectionedView: NSObject {
final class ThreeDSectionedViewDelegateProxy : DelegateProxy final class ThreeDSectionedViewDelegateProxy : DelegateProxy
, ThreeDSectionedViewProtocol , ThreeDSectionedViewProtocol
, DelegateProxyType { , DelegateProxyType {
static var factories: [((AnyObject) -> AnyObject?)] = [
{ ThreeDSectionedViewDelegateProxy(parentObject: $0) }
]
required init(parentObject: AnyObject) { required init(parentObject: AnyObject) {
super.init(parentObject: parentObject) super.init(parentObject: parentObject)
} }