iOS程序猿iOS DeveloperiOS入的那些坑

项目模块化调用之路(一):routable-ios

2016-11-07  本文已影响1342人  键盘风筝

小伙伴们,我又回来了,最近一直很忙碌,今天把手里的项目需求写完了,有点时间给大家整理一下模块化调用的第一节,讲一下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地址

上一篇下一篇

猜你喜欢

热点阅读