【发布时间】:2021-08-21 11:16:53
【问题描述】:
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
}
}
我正在尝试将 FSCalendarDelegate 函数更改为 Observable 以使用 ReactorKit。 但是当我运行这段代码时,发生了错误 “RxCocoa/DelegateProxy.swift:230:致命错误:在隐式展开可选值时意外发现 nil” 我不知道如何修复我的 DelegateProxy。为什么 aSelector 为零?
【问题讨论】:
标签: swift delegates rx-swift fscalendar