iOS 组件化的时代到临
YFRouter 是一个高效、轻量级的路由系统,帮你处理一系列的 URL Router 问题。
强烈建议配合 YFMediator 使用!!
- 2016.12.25 增加 URL - Object 绑定
- Demo
[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;
}
-------------------通过 URL 获取对象,有两种方式,一种是通过绑定一个 Object Handler 来获取 Object,另一种是直接将 URL 和 Object 绑定。
+ objectForRoute:params: 获取的是 YFObject,通过 value 属性获取绑定的 Object,通过 params 获取传递的参数。
[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;
}];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];// 这种写法也是可以的
// [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];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
标准的 Scheme 定义是 scheme://,URI 是 /path,完整的 URL 是 scheme:///path
在 YFRouter 中 URLPattern 是否以 / 开始都是可以的,即:
// 在 YFRouter 中他们是代表同一个 URL
scheme://feed/detail
scheme://feed/deatil/
scheme:///feed/detail
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。
使用这个方法注册一个 UcaughtHandler,所有未匹配到的 URL 都会进入这个方法。
+ (void)registerUncaughtHandler:(YFRouterHandlerBlock)handler;pod "YFRouter"建议在项目中利用默认 Scheme 和 Target 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:...];laizw, [email protected]
YFRouter is available under the MIT license. See the LICENSE file for more info.