Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.82 KB | None | 0 0
  1. import UIKit
  2.  
  3. class CalendarViewModel: NSObject {
  4.    
  5.     let dataProvider: EventCalendarProvider
  6.    
  7.     weak var pager: UIPageViewController?
  8.    
  9.     var calendar: EventCalendar?
  10.    
  11.     init(dataProvider: EventCalendarProvider) {
  12.         self.dataProvider = dataProvider
  13.     }
  14.    
  15.     func setAsDatSource(of pageViewController: UIPageViewController) {
  16.         pager = pageViewController
  17.         pager?.dataSource = self
  18.     }
  19.    
  20.     func loadCalendar() {
  21.         dataProvider.retrieve { [weak self] result in
  22.             guard let strongSelf = self else { return }
  23.             switch result {
  24.             case .success(let calendar):
  25.                 strongSelf.calendar = calendar
  26.                 let firstController = strongSelf.dayScheduleViewController(for: 0) ?? UIViewController()
  27.                 strongSelf.pager?.setViewControllers([firstController], direction: .forward, animated: false)
  28.             case .failure(let error):
  29.                 print(error)
  30.                //show error
  31.             }
  32.         }
  33.     }
  34.    
  35.     private func dayScheduleViewController(for index: Int) -> UIViewController? {
  36.         guard let calendar = calendar else { return nil }
  37.         guard (0..<calendar.days.count).contains(index) else { return nil }
  38.         let bundle = Bundle(for: Self.self)
  39.         let storyboard = UIStoryboard(name: "Main", bundle: bundle)
  40.         let day = calendar.days[index]
  41.         return storyboard.instantiateViewController(identifier: "DayScheduleViewController") { (coder) -> UIViewController? in
  42.             let viewModel = DayScheduleViewModel(daySchedule: day)
  43.             return DayScheduleViewController(coder: coder, viewModel: viewModel)
  44.         }
  45.     }
  46.    
  47. }
  48.  
  49. extension CalendarViewModel: UIPageViewControllerDataSource {
  50.    
  51.     func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
  52.         guard let nextController = viewController as? DayScheduleViewController else { return nil }
  53.         guard let calendar = calendar else { return nil }
  54.         let nextDay = nextController.viewModel.daySchedule
  55.         guard let index = calendar.days.firstIndex(of: nextDay) else { return nil }
  56.         return dayScheduleViewController(for: index - 1)
  57.     }
  58.    
  59.     func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
  60.         guard let previousController = viewController as? DayScheduleViewController else { return nil }
  61.         guard let calendar = calendar else { return nil }
  62.         let previousDay = previousController.viewModel.daySchedule
  63.         guard let index = calendar.days.firstIndex(of: previousDay) else { return nil }
  64.         return dayScheduleViewController(for: index + 1)
  65.     }
  66.    
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement