Я пытаюсь использовать KVKCaldendar, однако я получаю ошибку «Не соответствует протоколу» при попытке использовать CalendarDataSource.
Вот мое расширение:
extension JobDetailsViewController: CalendarDataSource {
func eventsForCalendar() -> [Event] {
return self.events
}
}
Вот где я создаю свой календарь:
private lazy var calendarView: CalendarView = {
var style = Style()
if UIDevice.current.userInterfaceIdiom == .phone {
style.month.isHiddenSeporator = true
style.timeline.widthTime = 40
style.timeline.offsetTimeX = 2
style.timeline.offsetLineLeft = 2
} else {
style.timeline.widthEventViewer = 500
}
style.timeline.startFromFirstEvent = false
style.followInInterface = true
style.timeline.offsetTimeY = 80
style.timeline.offsetEvent = 3
style.timeline.currentLineHourWidth = 40
style.allDay.isPinned = true
style.startWeekDay = .sunday
style.timeHourSystem = .twelveHour
let calendar = CalendarView(frame: view.frame, date: selectDate, style: style)
calendar.dataSource = self
return calendar
}()
Странная вещь в том, что если я создаю новый проект, который имеет только модуль KVKCalendar, кажется, он работает нормально, но в проекте, который я действительно хочу использовать это я получаю эту ошибку. Что может быть причиной?
Весь файл ViewController:
import UIKit
import KVKCalendar
class JobDetailsViewController: UIViewController {
var jobKeyStr: String?
var login = LoginResponseModel.getLogin()
var events = [Event]()
@IBOutlet weak var calendarFrame: UIView!
private lazy var selectDate: Date = {
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
return formatter.date(from: "14.12.2018") ?? Date()
}()
private lazy var segmentedControl: UISegmentedControl = {
let array: [CalendarType]
if UIDevice.current.userInterfaceIdiom == .pad {
array = CalendarType.allCases
} else {
array = CalendarType.allCases.filter({ $0 != .year })
}
let control = UISegmentedControl(items: array.map({ $0.rawValue.capitalized }))
control.tintColor = .red
control.selectedSegmentIndex = 0
control.addTarget(self, action: #selector(switchCalendar), for: .valueChanged)
return control
}()
private lazy var calendarView: CalendarView = {
var style = Style()
if UIDevice.current.userInterfaceIdiom == .phone {
style.month.isHiddenSeporator = true
style.timeline.widthTime = 40
style.timeline.offsetTimeX = 2
style.timeline.offsetLineLeft = 2
} else {
style.timeline.widthEventViewer = 500
}
style.timeline.startFromFirstEvent = false
style.followInInterface = true
style.timeline.offsetTimeY = 80
style.timeline.offsetEvent = 3
style.timeline.currentLineHourWidth = 40
style.allDay.isPinned = true
style.startWeekDay = .sunday
style.timeHourSystem = .twelveHour
let calendar = CalendarView(frame: view.frame, date: selectDate, style: style)
// calendar.delegate = self
calendar.dataSource = self
return calendar
}()
@objc func switchCalendar(sender: UISegmentedControl) {
let type = CalendarType.allCases[sender.selectedSegmentIndex]
calendarView.set(type: type, date: selectDate)
calendarView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 13.0, *) {
view.backgroundColor = .systemBackground
} else {
view.backgroundColor = .white
}
calendarView.set(type: .year, date: Date())
self.calendarFrame.addSubview(calendarView)
navigationItem.titleView = segmentedControl
getJobSchedule()
}
}
extension JobDetailsViewController: CalendarDataSource {
func eventsForCalendar() -> [Event] {
return events
}
}
extension JobDetailsViewController {
func createEvents(completion: ([Event]) -> Void) {
// let models = // Get events from storage / API
var events = [Event]()
//for model in models {
var event = Event()
// event.id = model.id
// event.start = model.startDate // start date event
// event.end = model.endDate // end date event
// event.color = model.color
// event.isAllDay = model.allDay
// event.isContainsFile = !model.files.isEmpty
//
// // Add text event (title, info, location, time)
// if model.allDay {
// event.text = "\(model.title)"
// } else {
// event.text = "\(startTime) - \(endTime)\n\(model.title)"
// }
events.append(event)
//}
completion(events)
}
}