小伙伴们,我又回来了,最近一直很忙碌,今天把手里的项目需求写完了,有点时间给大家整理一下模块化调用的第一节,讲一下routable-ios的简单原理和他的好处
随着项目的业务模块越来越多,代码越来越零碎,协同开发的时候相互页面调用会越来越臃肿,而且呈现碎片化,没有办法统一去管理,所以routable-ios出现了,看一下它的简单使用
1.注册
//在didFinishLaunchingWithOptions里注册
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
[[Routable sharedRouter] map:@"user/:id" toController:[ViewController class]];
[[Routable sharedRouter] map:@"sec/:str" toController:[SecViewController class]];
[[Routable sharedRouter] setNavigationController:nav];
[self.window setRootViewController:nav];
[self.window makeKeyAndVisible];
return YES;
}
[[Routable sharedRouter] map:@"user/:id" toController:[ViewController class]];
里的map是和后台约定好的规则,user是host,后面接着你需要的参数,后台返回给你字符串,就可以自己去跳转和处理需要的参数了
查看源代码,他其实通过map值经过UPRouterOptions
类的转换,把他当做key映射到字典里,value是控制器
//源代码
- (void)map:(NSString *)format toController:(Class)controllerClass withOptions:(UPRouterOptions *)options {
if (!format) {
@throw [NSException exceptionWithName:@"RouteNotProvided"
reason:@"Route #format is not initialized"
userInfo:nil];
return;
}
if (!options) {
options = [UPRouterOptions routerOptions];
}
options.openClass = controllerClass;
[self.routes setObject:options forKey:format];
}
2.调用
//点击跳转的时候条用一下方法,传一下参数
-(void)click{
[[Routable sharedRouter] open:@"sec/12" animated:YES extraParams:@{@"temp":@"1"}];
}
源代码太多了,我就不贴出来了,首先根据传入的open字符串通过- (RouterParams *)routerParamsForUrl:(NSString *)url extraParams: (NSDictionary *)extraParams;
这个方法来把传入的参数格式化,赋值给UPRouterOptions
,通过UPRouterOptions
相对应的字典里的key值,查找到需要跳转的控制器
3.处理参数
//在SecViewController 里下一下router初始化方法里接一下传过来的字典,就ok了
- (id)initWithRouterParams:(NSDictionary *)params {
if ((self = [self initWithNibName:nil bundle:nil])) {
}
return self;
}
routable-ios有他的好处,在view上也可以跳转,点击推送也可以直接在appdelagate跳转Controller,而且注册的时候可以写在一个基类里同意管理
同样他也有缺点,传入的参数不支持url格式,不过这个我觉得利大于弊,可以一用
demo地址