Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- class CalendarViewModel: NSObject {
- let dataProvider: EventCalendarProvider
- weak var pager: UIPageViewController?
- var calendar: EventCalendar?
- init(dataProvider: EventCalendarProvider) {
- self.dataProvider = dataProvider
- }
- func setAsDatSource(of pageViewController: UIPageViewController) {
- pager = pageViewController
- pager?.dataSource = self
- }
- func loadCalendar() {
- dataProvider.retrieve { [weak self] result in
- guard let strongSelf = self else { return }
- switch result {
- case .success(let calendar):
- strongSelf.calendar = calendar
- let firstController = strongSelf.dayScheduleViewController(for: 0) ?? UIViewController()
- strongSelf.pager?.setViewControllers([firstController], direction: .forward, animated: false)
- case .failure(let error):
- print(error)
- //show error
- }
- }
- }
- private func dayScheduleViewController(for index: Int) -> UIViewController? {
- guard let calendar = calendar else { return nil }
- guard (0..<calendar.days.count).contains(index) else { return nil }
- let bundle = Bundle(for: Self.self)
- let storyboard = UIStoryboard(name: "Main", bundle: bundle)
- let day = calendar.days[index]
- return storyboard.instantiateViewController(identifier: "DayScheduleViewController") { (coder) -> UIViewController? in
- let viewModel = DayScheduleViewModel(daySchedule: day)
- return DayScheduleViewController(coder: coder, viewModel: viewModel)
- }
- }
- }
- extension CalendarViewModel: UIPageViewControllerDataSource {
- func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
- guard let nextController = viewController as? DayScheduleViewController else { return nil }
- guard let calendar = calendar else { return nil }
- let nextDay = nextController.viewModel.daySchedule
- guard let index = calendar.days.firstIndex(of: nextDay) else { return nil }
- return dayScheduleViewController(for: index - 1)
- }
- func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
- guard let previousController = viewController as? DayScheduleViewController else { return nil }
- guard let calendar = calendar else { return nil }
- let previousDay = previousController.viewModel.daySchedule
- guard let index = calendar.days.firstIndex(of: previousDay) else { return nil }
- return dayScheduleViewController(for: index + 1)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement