Skip to content

Instantly share code, notes, and snippets.

@RamwiseMatt
Last active June 21, 2018 05:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RamwiseMatt/f63b4d4c33c128199c580c70cb02634f to your computer and use it in GitHub Desktop.
Save RamwiseMatt/f63b4d4c33c128199c580c70cb02634f to your computer and use it in GitHub Desktop.
Example of broken DelegateProxy (rxSwift 4.0) for pure Swift delegate protocols
//
// 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