Latest 0.1.2
Homepage https://github.com/laichanwai/YFRouter
License MIT
Platforms ios 8.0
Dependencies YFLog
Authors

License   Support   CI Status   Pod

iOS 组件化的时代到临

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

强烈建议配合 YFMediator 使用!!

News

Usage

  • Demo

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 自带 三个 Key

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 匹配机制

Scheme

YFRouter 有一个默认的 Scheme YFRouterDefaultScheme,住注册 URL 的时候如果 URL 不含有 Scheme,则会使用 YFRouter 默认的 Scheme。

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 定义是 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,然后 Route 到这个 URL

YF:///feed/detail

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

UncaughtHandler

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

+ (void)registerUncaughtHandler:(YFRouterHandlerBlock)handler;

Installation

pod "YFRouter"

Tips

建议在项目中利用默认 SchemeTarget Action 的方式来处理本地 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:...];

Author

laizw, [email protected]

License

YFRouter is available under the MIT license. See the LICENSE file for more info.

Latest podspec

{
    "name": "YFRouter",
    "version": "0.1.2",
    "summary": "A iOS Router Component",
    "description": "YFRouter is a part of YFKituff0c",
    "homepage": "https://github.com/laichanwai/YFRouter",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "laizw": "[email protected]"
    },
    "source": {
        "git": "https://github.com/laichanwai/YFRouter.git",
        "tag": "0.1.2"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source_files": [
        "YFRouter",
        "YFRouter/*.{h,m}"
    ],
    "dependencies": {
        "YFLog": []
    }
}

Pin It on Pinterest

Share This