Skip to content
YFRouter 是一个高效、轻量级的路由系统,帮你处理 iOS 中一系列的 URL Router 问题
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
YFRouter
YFRouterDemo.xcodeproj
YFRouterDemo.xcworkspace
YFRouterDemo
YFRouterDemoTests
.gitignore
.travis.yml
LICENSE
Podfile
Podfile.lock
README.md
YFRouter.podspec

README.md

YFRouter

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, i@laizw.cn

License

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

You can’t perform that action at this time.