URL Scheme 路由
- 使
URL Scheme
处理本地的跳转
- 通过中间层进行注册
&
调用(load方法里面把被调用者注册到中间层)
命名规范
1 2
| // 协议://主机名[:端口]/路径/[?参数]#fragment @"lstest://lsapp:11111/china/ls.com?a=1&b=2"
|
- lstest:协议名
- lsapp:主机名,为了区分 不同的app
- 端口号:可以将端口号作为 模块ID
- china/ls.com:路径,可以是跳转到模块的 指定页面
- a=1&b=2:参数,跳转的参数
解析
优缺点
URL Scheme 路由示例
思路:
B组件使用URL将Block注册给路由,路由以URL为key,将Block存储起来。
A组件通过URL调用路由的方法,找到对应的Block,完成对A的调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| typedef void (^ZJRouterBlock)(NSDictionary *dic);
#import "ZJRouter.h"
@interface ZJRouter () @property (strong,nonatomic)NSMutableDictionary * blockDic; @end @implementation ZJRouter // 参数 @{@"":...} + (instancetype)shareInstance{ static ZJRouter * router = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ router = [[self alloc] init]; router.blockDic = @{}.mutableCopy; }); return router; }
// 注册 - (void)registerUrl:(NSString *)url block:(ZJRouterBlock)block{ if (!url || !block) return; if (block) { self.blockDic[url] = [block copy]; } } // 执行 - (void)excuteBlockWithUrl:(NSString *)key params:(NSDictionary *)params{ if (!key) return; ZJRouterBlock block = self.blockDic[key]; if (!block) return; block(params); }
@end
|
1 2 3 4 5
| + (void)load { [[ZJRouter shareInstance] registerUrl:@"A:aTestAction" block:^(NSDictionary * _Nonnull dic) { NSLog(@"dic:%@",dic); }]; }
|
1
| [[ZJRouter shareInstance] excuteBlockWithUrl:@"A:aTestAction" params:@{@"text":@"文字"}];
|