YFRouter 0.1.2

YFRouter 0.1.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新版本2016年12月

laizw维护。



YFRouter 0.1.2

  • 作者
  • laizw

     

iOS 组件化时代的到来

YFRouter 是一个高效、轻量级的路由系统,帮助您处理一系列的 URL Router 问题。

强烈建议与 YFMediator 结合使用!!

新闻

使用方法

  • 示例

2016121734431Route.gif

URL Router

[YFRouter registerURL:@"YF:///feed/detail" handler:^(NSDictionary *params) {
    YFDebug(@"%@", params);
}];

[YFRouter route:@"YF:///feed/detail?id=001" params:nil];

-------------------
{
    YFSchemeKey = YF;
    YFPathKey = @"feed/detail";
    YFURLKey = "YF:///feed/detail?id=001";
    id = 001;
}
-------------------

params 内置三个键

extern NSString * const YFRouterSchemeKey;
extern NSString * const YFRouterPathKey;
extern NSString * const YFRouterURLKey;

模糊匹配

[YFRouter registerURL:@"YF:///feed/detail/:id" handler:^(NSDictionary *params) {
    YFDebug(@"%@", params);
}];

[YFRouter route:@"YF:///feed/detail/001" params:nil];

-------------------
{
    YFSchemeKey = YF;
    YFPathKey = @"feed/detail";
    YFURLKey = "YF:///feed/detail?id=001";
    id = 001;
}
-------------------

自定义参数

[YFRouter registerURL:@"YF:///feed/detail" handler:^(NSDictionary *params) {
    YFDebug(@"%@", params);
}];

[YFRouter route:@"YF:///feed/detail?id=001" params:@{@"city" : @"shanghai"}];

-------------------
{
    YFSchemeKey = YF;
    YFPathKey = @"feed/detail";
    YFURLKey = "YF:///feed/detail?id=001";
    id = 001;
    city = shanghai;
}
-------------------

Object Router

通过 URL 获取对象,有两种方法,一种是通过绑定一个 Object Handler 来获取 Object,另一种是直接将 URLObject 绑定。

+ objectForRoute:params: 获取的是 YFObject,通过 value 属性获取绑定的 Object,通过 params 获取传递的参数。

2016121717816object.gif

绑定 Object Handler
[YFRouter registerURL:@"YF:///alert" objectHandler:^id(NSDictionary *params) {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:params[@"title"] message:params[@"message"] preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]];
    return alert;
}];
绑定 Object
UIAlertController *alert = [UIAlertController alertControllerWithTitle:params[@"title"] message:params[@"message"] preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]];

[YFRouter registerURL:@"YF://alert" object:alert];
获取 Object
// 这种写法也是可以的
// [YFRouter objectForRoute:@"YF://alert" params:@{@"title" : @"Hello", @"message" : @"World"}];
UIAlertController *alert = [YFRouter objectForRoute:@"YF://alert?title=Hello&message=World" params:nil].value;
[self presentViewController:alert animated:YES completion:nil];

YFRoutr 机制

URL 匹配机制

方案

YFRouter 有一个默认的方案 YFRouterDefaultScheme,在注册 URL 时,如果 URL 不包含方案,则会使用 YFRouter 的默认方案。

extern NSString * const YFRouterDefaultScheme;

[YFRouter registerURL:@"my:///feed/detail" handler:handler]; // my:///feed/detail 

[YFRouter registerURL:@"/feed/detail" handler:handler]; // YFRouterScheme:///feed/detail 
URLPattern

标准的方案定义是 scheme://,URI 是 /path,完整的 URL 是 scheme:///path

在 YFRouter 中,URLPattern 是否以 / 开头都是可以的,即

// 在 YFRouter 中他们是代表同一个 URL
scheme://feed/detail
scheme://feed/deatil/
scheme:///feed/detail

shouldFallbackToLastHandler

YFRouter 中有一个选项 shouldFallbackToLastHandler,默认为 NO

+ (void)shouldFallbackToLastHandler:(BOOL)shouldFallback;

我们在 YFRouter 中注册这个 URL

YF:///feed

现在我们将 shouldFallbackToLastHandler 设置为 NO,然后路由到这个 URL

YF:///feed/detail

会发现找不到对应的处理器,因为关闭 shouldFallbackToLastHandler 之后,就开启了严格匹配模式,只会查找对应 URL YF:///feed/detail 的处理器。

UncaughtHandler

使用这个方法注册一个 UcaughtHandler,所有未匹配到的 URL 都会进入这个方法。

+ (void)registerUncaughtHandler:(YFRouterHandlerBlock)handler;

安装

pod "YFRouter"

提示

建议在项目中利用默认 方案目标动作 的方式来处理本地 URL

[YFRouter registerURL:@"/:target/:action" handler:^(NSDictionary *params) {
    id target = params[@"target"];
    id action = params[@"action"];

    // 根据 target 和 action 来处理业务
    // ...
}];

[YFRouter route:@"/user/login" params:...];
[YFRouter route:@"/user/search?text=laizw" params:...];

作者

laizw, [email protected]

许可证

YFRouter 采用 MIT 许可证。更多信息请参阅 LICENSE 文件。