Last active
June 21, 2018 05:59
-
-
Save RamwiseMatt/f63b4d4c33c128199c580c70cb02634f to your computer and use it in GitHub Desktop.
Example of broken DelegateProxy (rxSwift 4.0) for pure Swift delegate protocols
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// RxJTAppleCalendarDelegateProxy.swift | |
// bookingclient | |
// | |
// Created by Mats on 7/9/17. | |
// Copyright © 2017 Ramwise. All rights reserved. | |
// | |
import JTAppleCalendar | |
import RxSwift | |
import RxCocoa | |
extension JTAppleCalendarView: HasDelegate { | |
public typealias Delegate = JTAppleCalendarViewDelegate | |
} | |
internal class RxJTAppleCalendarDelegateProxy | |
: DelegateProxy<JTAppleCalendarView, JTAppleCalendarViewDelegate> | |
, DelegateProxyType | |
, JTAppleCalendarViewDelegate { | |
internal init(parentObject: JTAppleCalendarView) { | |
super.init(parentObject: parentObject, delegateProxy: RxJTAppleCalendarDelegateProxy.self) | |
} | |
internal static func registerKnownImplementations() { | |
self.register { RxJTAppleCalendarDelegateProxy(parentObject: $0) } | |
} | |
lazy var didSelectPublishSubject = PublishSubject<(date: Date, cell: JTAppleCell?, cellState: CellState)>() | |
lazy var didDeselectPublishSubject = PublishSubject<(date: Date, cell: JTAppleCell?, cellState: CellState)>() | |
internal func calendar(_ calendar: JTAppleCalendarView, didSelectDate date: Date, cell: JTAppleCell?, cellState: CellState) { | |
didSelectPublishSubject.on(.next((date: date, cell: cell, cellState: cellState))) | |
(self.forwardToDelegate() as? JTAppleCalendarViewDelegate)?.calendar(calendar, didSelectDate: date, cell: cell, cellState: cellState) | |
} | |
internal func calendar(_ calendar: JTAppleCalendarView, didDeselectDate date: Date, cell: JTAppleCell?, cellState: CellState) { | |
didDeselectPublishSubject.on(.next((date: date, cell: cell, cellState: cellState))) | |
(self.forwardToDelegate() as? JTAppleCalendarViewDelegate)?.calendar(calendar, didDeselectDate: date, cell: cell, cellState: cellState) | |
} | |
deinit { | |
didSelectPublishSubject.on(.completed) | |
didDeselectPublishSubject.on(.completed) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment