iOS进阶之路由MGJRouter-1(13)

结论: 类的load方法的调用发生在app main函数之前。
特点: 当类被引用进项目的时候就会执行 load 函数(在 main 函数开始执行之前),与这个类是否被用到无关,每个类的 load 函数只会自动调用一次。

之前也去了解路由的概念,但是一直拖着没去认真学习,没去实践。因为一直觉得陌生不知怎么下手。我知道大的项目以及组件化开发离不了路由实现。路由是一项重要的技能。我决定花一段时间去研究它、demo中实现它。一定要学会路由。并能很熟练的应用。一口吃不一个胖子,要有耐心,从易到难。先学习一个简单的例子。这是蘑菇街的一个路由的方法。只是觉得MGJRouter简单。其原理主要是通过注册URL来实现路由跳转。

背景

因为app中有大量与H5之间的交互,原生和H5的跳转操作比较多比较频繁,新增一个跳转又涉及到改代码发版本,为了统一iOS、安卓和H5的跳转,引入了路由。Router就像是个调度中心,各个模块通过路由调度其他模块,模块之间不需要相互引用,调度方式更加统一,更加自由,能够实现解耦的作用,同时也为之后的组件化开发提供了基础。

MGJRouter

在这里插入图片描述

使用

主要有两个步骤:

  1. 注册URL生成路由表。
  2. openUrl实现跳转。

下面是一个简单的使用demo:

一、我们创建一个类GlobalModuleRouter,然后在+(void)load方法里面统一注册url

#import <Foundation/Foundation.h>

@interface GlobalModuleRouter : NSObject

@end

#import "GlobalModuleRouter.h"
#import "MGJRouter.h"
#import "TestViewController1.h"
#import "TestViewController2.h"
#import "TestViewController3.h"

@implementation GlobalModuleRouter

// 在load方法中自动注册,在主工程中不用写任何代码。
+ (void)load {
    
    [MGJRouter registerURLPattern:@"LWT://Test1/PushMainVC" toHandler:^(NSDictionary *routerParameters) {
        UINavigationController *navigationVC = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"];
        TestViewController1 *vc = [[TestViewController1 alloc] init];
        [navigationVC pushViewController:vc animated:YES];
    }];
    
    
    [MGJRouter registerURLPattern:@"LWT://Test2/PushMainVC" toHandler:^(NSDictionary *routerParameters) {
        UINavigationController *navigationVC = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"];
        NSString *labelText = routerParameters[MGJRouterParameterUserInfo][@"text"];
        TestViewController2 *vc = [[TestViewController2 alloc] init];
        vc.labelText = labelText;
        [navigationVC pushViewController:vc animated:YES];
    }];
    
    [MGJRouter registerURLPattern:@"LWT://Test3/PushMainVC" toHandler:^(NSDictionary *routerParameters) {
        UINavigationController *navigationVC = routerParameters[MGJRouterParameterUserInfo][@"navigationVC"];
        void(^block)(NSString *) = routerParameters[MGJRouterParameterUserInfo][@"block"];
        TestViewController3 *vc = [[TestViewController3 alloc] init];
        vc.clicked = block;
        [navigationVC pushViewController:vc animated:YES];
    }];
    
    [MGJRouter registerURLPattern:@"LWT://Test2/getMainVC" toObjectHandler:^id(NSDictionary *routerParameters) {
        NSString *labelText = routerParameters[MGJRouterParameterUserInfo][@"text"];
        TestViewController2 *vc = [[TestViewController2 alloc] init];
        vc.labelText = labelText;
        return vc;
    }];
    
}
@end







二、调用:

#import "ViewController.h"
#import "MGJRouter.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (IBAction)pushTest1ModuleAction:(id)sender {
    [MGJRouter openURL:@"LWT://Test1/PushMainVC"
          withUserInfo:@{@"navigationVC" : self.navigationController,
                         }
            completion:nil];

}

- (IBAction)pushTest2ModuleAction:(id)sender {
    [MGJRouter openURL:@"LWT://Test2/PushMainVC"
          withUserInfo:@{@"navigationVC" : self.navigationController,
                         @"text": @"爱就像蓝天白云晴空万里",
                         }
            completion:nil];
}
- (IBAction)pushTest3ModuleAction:(id)sender {
    [MGJRouter openURL:@"LWT://Test3/PushMainVC"
          withUserInfo:@{@"navigationVC" : self.navigationController,
                         @"block":^(NSString * text){
                                    NSLog(@"%@",text);
                                },
                        }
            completion:nil];
}

- (IBAction)objectTestAction:(id)sender {
    [self.navigationController pushViewController:[MGJRouter objectForURL:@"LWT://Test2/getMainVC" withUserInfo:@{@"text" : @"我知道我对你不仅仅是喜欢",}] animated:YES];
}

对应下列四种情景:
在这里插入图片描述

pod ‘MGJRouter’, ‘~>0.9.0’

MGJRouter_Swift版本

http://www.pianshen.com/article/4692189680/

参考

[iOS] 组件化之一:MGJRouter的简单实用

发布了249 篇原创文章 · 获赞 224 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/shifang07/article/details/101033028