RxFSCalendarDelegateProxy.swift
import Foundation
import RxSwift
import RxCocoa
import FSCalendar
class RxFSCalendarDelegateProxy: DelegateProxy<FSCalendar, FSCalendarDelegate>, DelegateProxyType, FSCalendarDelegate {
static func registerKnownImplementations() {
self.register { (calendar) -> RxFSCalendarDelegateProxy in
RxFSCalendarDelegateProxy(parentObject: calendar, delegateProxy: self)
}
}
static func currentDelegate(for object: FSCalendar) -> FSCalendarDelegate? {
return object.delegate
}
static func setCurrentDelegate(_ delegate: FSCalendarDelegate?, to object: FSCalendar) {
object.delegate = delegate
}
}
extension Reactive where Base: FSCalendar {
var delegate : DelegateProxy<FSCalendar, FSCalendarDelegate> {
return RxFSCalendarDelegateProxy.proxy(for: self.base)
}
var didSelect : Observable<Date> {
return delegate.methodInvoked(#selector(FSCalendarDelegate.calendar(_:didSelect:at:)))
.map({ (params) in
return params[1] as? Date ?? Date()
})
}
}
MainViewController.swift
import UIKit
import ReactorKit
import FSCalendar
class MainViewController: BaseViewController, View {
typealias Reactor = MainViewReactor
let calendar = FSCalendar()
let label = UILabel()
init(reactor: Reactor) {
super.init()
defer { self.reactor = reactor }
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func setupLayout() {
self.view.addSubview(calendar)
}
override func makeConstraints() {
self.calendar.snp.makeConstraints {
$0.bottom.equalToSuperview()
$0.top.equalToSuperview()
$0.left.equalToSuperview()
$0.right.equalToSuperview()
}
}
func bind(reactor: MainViewReactor) {
// MARK: input
calendar.rx.didSelect.asObservable()
.map { Reactor.Action.setDay($0) }
.bind(to: reactor.action)
.disposed(by: disposeBag)
// MARK: output
}
}
I am trying to change FSCalendarDelegate func to Observable to use ReactorKit. But When I run this code, error occurred "RxCocoa/DelegateProxy.swift:230: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value" I don't know how to fix my DelegateProxy. why aSelector is nil?