美文网首页iOS程序猿iOS DeveloperiOS入的那些坑
项目模块化调用之路(一):routable-ios

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

作者: 键盘风筝 | 来源:发表于2016-11-07 14:54 被阅读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地址

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/eqrouttx.html