iOS组件化同一个项目工程中的使用(一)

it2022-05-05  113

最近研究组件化、看了不少的资料,遇到很多坑,这里记录一下方便小伙伴参考。不会和大神一样我会用最朴实简单的语言表达,希望认识更多的朋友、我心愿世界和平

组件化个人感觉组件化维护成本较高、主要是为了解耦,但是有利必有弊

一、同一个工程下组件化实现思路,主要用中间件CTMediator(把它理解成沟通的桥梁,比如很多控制器之间跳转是直接push的,那么用到中间件CTMediator 就是通过CTMediator push的)

两个控制器的跳转实现:

1.项目导入CTMediator 文件,当然也可以pod导入 pod 'CTMediator'

 

 2.写跳转目标文件:目的就是写一个跳转到目标控制器的方法 准备提供给3步骤中CTMediator+CTMediatorManager类中的方法参数

注意:Target_TotalTargetVC对象名称Target_前缀是固定的,

Action_nativeDetailMainViewController方法名前缀Action_是固定的,参照CTMediator代码可见原因

Target_TotalTargetVC.h代码

#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface Target_TotalTargetVC : NSObject - (UIViewController *)Action_nativeDetailMainViewController:(NSDictionary *)params; @end NS_ASSUME_NONNULL_END

Target_TotalTargetVC.m

#import "Target_TotalTargetVC.h" #import "MainViewController.h" @implementation Target_TotalTargetVC - (UIViewController *)Action_nativeDetailMainViewController:(NSDictionary *)params { MainViewController *VC = [[MainViewController alloc]init]; VC.dic = params; return VC; } @end

3.写CTMediator分类CTMediator+CTMediatorManager

此分类目的:通过调用中间件CTMediator中的方法 ,方法中的参数来源于Target_TotalTargetVC对象,结果返回跳转的控制器UIViewController

 CTMediator+CTMediatorManager.h

#import "CTMediator.h" NS_ASSUME_NONNULL_BEGIN @interface CTMediator (CTMediatorManager) - (UIViewController *)CTMediator_viewMainViewController:(NSDictionary*)params; @end NS_ASSUME_NONNULL_END

CTMediator+CTMediatorManager.m

#import "CTMediator+CTMediatorManager.h" // 这里指的是Target_TotalTargetVC.h对象 NSString * const kCTMediatorTotalTargetObject = @"TotalTargetVC"; // 这指的是Target_TotalTargetVC.m中 Action_nativeDetailMainViewControllerf 方法 NSString * const kCTMediatorActionNativeDetailMainViewController = @"nativeDetailMainViewController"; @implementation CTMediator (CTMediatorManager) - (UIViewController *)CTMediator_viewMainViewController:(NSDictionary*)params { //由于CTMediator_viewMainViewController是CTMediator的扩展,所以可以直接使用CTMediator的方法 UIViewController *viewController = [self performTarget:kCTMediatorTotalTargetObject action:kCTMediatorActionNativeDetailMainViewController params:params]; if ([viewController isKindOfClass:[UIViewController class]]) { return viewController; } else { // 这里处理异常场景,具体如何处理取决于产品 return [[UIViewController alloc] init]; } } @end

4.最后一步,在你需要跳转的地方这样写就可以了

#pragma mark - 跳转 - (void)toMainViewController:(BOOL)isAnimate{ UIViewController *VC = [[CTMediator sharedInstance]CTMediator_viewMainViewController:@{@"key":@"CTMetor传值你好"}]; [self.navigationController pushViewController:VC animated:isAnimate]; }

这里只写同一个工程中的中间件,下一篇文章介绍   不同项目工程间的跳转。

 

转载于:https://www.cnblogs.com/dujiahong/p/11205013.html

相关资源:swift-iOS从零到一搭建组件化项目架构

最新回复(0)