KVKCalendar Не соответствует протоколу CalendarDataSource - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь использовать 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)
    }
}
...