Contents
  1. 1. 纯Swift路由方案探究
    1. 1.1. 回顾历史 Objective-c
      1. 1.1.1. + Load
      2. 1.1.2. 反射
      3. 1.1.3. 调度形式
      4. 1.1.4. 问题
    2. 1.2. RYRouter

纯Swift路由方案探究

前言

OC 写了几年了到了新公司开始写Swift
项目正在成长期, 开始人也不多, 模块化程度不高
于是就整了这套路由方案
发现现在很多Swift路由方案很大程度上还是使用了OC的特性比如需要继承NSObject
作为一名Swift萌新, 这次路由方案的设计是很好的一次对Swift的探索

回顾历史 Objective-c

以往路由方案的核心主要是 +Load注册 反射

+ Load

1
2
3
+ (void)Load {
// 注册唯一标示
}

反射

生成类

1
Class myClass = NSClassFromString(@"DetailViewController")

方法调用

1
2
3
4
5
6
7
8
9
SEL action = NSSelectorFromString(selectorName);
if (![self respondsToSelector:action]) {
return;
}
IMP imp = [self methodForSelector:action];
void (*func)(id, SEL, id) = (void *)imp;
func(self, action, data);

调度形式

1
2
3
4
5
6
7
8
// Target-Action
[self performTarget:@"ModuleA" action:@"Func" params:@{ @"name":@"OldWang" }]
// URL
[self open:@"demo://ModuleA/showDetail?id=100"]
// ...

问题

  • Swift中没有 +Load
  • Swift包含命名空间, 反射较为麻烦, 且必须继承NSObject才能反射
  • 硬编码多维护成本较高, 无法编译检查

RYRouter

RouterUML02-2

Contents
  1. 1. 纯Swift路由方案探究
    1. 1.1. 回顾历史 Objective-c
      1. 1.1.1. + Load
      2. 1.1.2. 反射
      3. 1.1.3. 调度形式
      4. 1.1.4. 问题
    2. 1.2. RYRouter