RQRouter.m 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. //
  2. // RQRouter.m
  3. // RQCommon
  4. //
  5. // Created by 张嵘 on 2018/11/16.
  6. // Copyright © 2018 张嵘. All rights reserved.
  7. //
  8. #import "RQRouter.h"
  9. @interface RQRouter ()
  10. /// viewModel到viewController的映射
  11. @property (nonatomic, copy) NSDictionary *viewModelViewMappings;
  12. @end
  13. @implementation RQRouter
  14. static RQRouter *sharedInstance_ = nil;
  15. + (id)allocWithZone:(struct _NSZone *)zone
  16. {
  17. static dispatch_once_t onceToken;
  18. dispatch_once(&onceToken, ^{
  19. sharedInstance_ = [super allocWithZone:zone];
  20. });
  21. return sharedInstance_;
  22. }
  23. - (id)copyWithZone:(NSZone *)zone
  24. {
  25. return sharedInstance_;
  26. }
  27. + (instancetype)sharedInstance {
  28. static dispatch_once_t onceToken;
  29. dispatch_once(&onceToken, ^{
  30. sharedInstance_ = [[self alloc] init];
  31. });
  32. return sharedInstance_;
  33. }
  34. - (RQBaseViewController *)viewControllerForViewModel:(RQBaseViewModel *)viewModel {
  35. NSString *viewController = self.viewModelViewMappings[NSStringFromClass(viewModel.class)];
  36. NSParameterAssert([NSClassFromString(viewController) isSubclassOfClass:[RQBaseViewController class]]);
  37. NSParameterAssert([NSClassFromString(viewController) instancesRespondToSelector:@selector(initWithViewModel:)]);
  38. return [[NSClassFromString(viewController) alloc] initWithViewModel:viewModel];
  39. }
  40. /// 这里是viewModel -> ViewController的映射
  41. /// If You Use Push 、 Present 、 ResetRootViewController ,You Must Config This Dict
  42. - (NSDictionary *)viewModelViewMappings {
  43. return @{/*MainModule*/
  44. @"RQNewFeatureViewModel" : @"RQNewFeatureViewController",
  45. @"RQMainTabBarViewModel" : @"RQMainTabBarViewController",
  46. /*Base*/
  47. @"RQWebViewModel" : @"RQWebViewViewController",
  48. /*LoginModule*/
  49. @"RQLoginViewModel" : @"RQLoginViewController",
  50. @"NYLoginBindViewModel" : @"NYLoginBindViewController",
  51. @"RQRegisterViewModel" : @"RQRegisterViewController",
  52. @"RQVerificationSmsCodeViewModel" : @"RQVerificationSmsCodeViewController",
  53. @"RQUpdatePasswordViewModel" : @"RQUpdatePasswordViewController",
  54. /*HomePageModular*/
  55. @"RQHomePageViewModel" : @"RQHomePageViewController",
  56. @"RQStrongViewModel" : @"StrongVC",
  57. @"LightingAndSoundViewModel" : @"LightingAndSoundVC",
  58. @"RQHomeSubPageViewModel" : @"RQHomeSubPageViewController",
  59. @"RQHomePageSubjectOneOrFourViewModel" : @"RQHomePageSubjectOneOrFourViewController",
  60. @"RQErrorAndCollectViewModel" : @"RQErrorAndCollectViewController",
  61. @"RQErrorViewModel" : @"RQErrorViewController",
  62. @"RQCollectViewModel" : @"RQCollectViewController",
  63. @"RQHomePageTeachVideoViewModel" : @"RQHomePageTeachVideoViewController",
  64. @"RQHomePageTeachVideoListViewModel" : @"RQHomePageTeachVideoListViewController",
  65. @"RQPlaceListViewModel" : @"RQPlaceListViewController",
  66. @"RQPlaceDetailViewModel" : @"RQPlaceDetailViewController",
  67. @"RQExerciseViewModel" : @"RQExerciseViewController",
  68. @"RQExerciseSubViewModel" : @"RQExerciseSubViewController",
  69. @"RQSimulateExamViewModel" : @"RQSimulateExamViewController",
  70. @"RQCatalogueViewModel" : @"RQCatalogueViewController",
  71. @"RQExamResultViewModel" : @"RQExamResultViewController",
  72. @"RQExamProbabilityViewModel" : @"RQExamProbabilityViewController",
  73. @"RQSpecialPractiseViewModel" : @"RQSpecialPractiseViewController",
  74. @"RQChapterAndPointListViewModel" : @"RQChapterAndPointListViewController",
  75. @"RQHoursBeforeExamHomeViewModel" : @"RQHoursBeforeExamHomeViewController",
  76. /*TimeModule*/
  77. @"RQTimeViewModel" : @"RQTimeViewController",
  78. @"NYTheoryTimeViewModel" : @"NYTheoryTimeVC",
  79. @"NYGetjobTimeViewModel" : @"NYGetjobTimeVC",
  80. @"NYClassRoomViewModel" : @"NYClassRoomVC",
  81. // @"RQTimeViewModel" : @"TimingBaseVC",
  82. /*DiscoverModule*/
  83. // @"RQDiscoverViewModel" : @"RQDiscoverViewController",
  84. @"RQDiscoverViewModel" : @"SearchBase",
  85. /*ProfileModule*/
  86. //#if DEBUG
  87. // @"RQProfileViewModel" : @"RQProfileViewController",
  88. //#else
  89. @"RQProfileViewModel" : @"FunctionVC",
  90. //#endif
  91. @"RQSettingViewModel" : @"RQSettingViewController",
  92. @"RQAboutViewModel" : @"RQAboutViewController",
  93. @"RQChooseCarTypeViewModel" : @"RQChooseCarTypeViewController",
  94. @"RQSynchronizationViewModel" : @"RQSynchronizationViewController",
  95. @"RQUserInfoViewModel" : @"RQUserInfoViewController",
  96. @"RQActivateVIPViewModel" : @"RQActivateVIPViewController",
  97. /*OtherModule*/
  98. @"RQVideoCatalogueViewModel" : @"RQVideoCatalogueViewController",
  99. @"NYVideoCatalogueViewModel" : @"NYVideoCatalogueViewController",
  100. @"NYBlockExerciseViewModel" : @"NYBlockExerciseViewController",
  101. @"NYFailSpecialExerciseViewModel" : @"NYFailSpecialExerciseViewController",
  102. @"NYFailSpecialExerciseDetailsViewModel":
  103. @"NYFailSpecialExerciseDetailsViewController",
  104. @"RQVideoDetailViewModel" : @"RQVideoDetailViewController",
  105. @"RQVideoDetailSubPageViewModel" : @"RQVideoDetailSubPageViewController",
  106. @"RQVipViewModel" : @"RQVipViewController",
  107. // @"RQPayViewModel" : @"RQPayViewController",
  108. @"RQVipCenterViewModel" : @"RQVipCenterViewController",
  109. @"RQVipCenterSubViewModel" : @"RQVipCenterSubViewController",
  110. @"RQVipCenterSubListViewModel" : @"RQVipCenterSubListViewController",
  111. @"RQDspVideoDetailViewModel" : @"RQDspVideoDetailViewController",
  112. @"RQRetrainViewModel" : @"RQRetrainViewController",
  113. @"RQRetrainOrderViewModel" : @"RQRetrainOrderViewController",
  114. @"RQStudentChangeSchoolViewModel" : @"StudentChangeSchoolVC",
  115. @"RQExplainVideoViewModel" : @"RQExplainVideoViewController",
  116. @"NYExaminationViewModel" : @"NYExaminationViewController",
  117. @"NYExaminationRoomViewModel" : @"NYExaminationRoomViewController",
  118. @"NYLIVipCoachViewModel" : @"NYLIVipCoachViewController",
  119. @"NYLIVideoDetailViewModel" : @"NYLIVideoDetailViewController",
  120. };
  121. }
  122. @end