是否有与Sinatra的样式URL路由等效的用于Objective-C?我希望将字符串映射到带有参数的函数来处理一些内部导航逻辑。
我想让控制器管理像Davis.js,Express,Sinatra等中发生的路线。我知道TTNavigationController有这个映射,但我正在寻找更轻量级的东西,而不是绑定到UIKit(或类似的) NavigationController。
可能会像以下一样起作用的东西:
// in a controller
[Router map:@"/page/:name/" toSelector:@selector(loadPage:)];
// then elsewhere
[Router dispatch:@"/page/about/"];
我知道这可以自己创建,但在走这条路线之前(原谅双关语)我想知道是否已有任何东西。我之前创建了自己的JavaScript实现,几周后创建/公开了许多高级库。
答案 0 :(得分:5)
我在GutHub上创建了这个实现:https://github.com/rc1/RCRouter。
它尚未经过战斗测试,但是概念验证并且很可能需要一些改进。任何帮助改善它将非常感激。
以下是使用示例:
#include "RCRouter.h"
-(id)init {
// map routes
[RCRouter map:@"/page/:title/" to:self with:@selector(page:)];
[RCRouter map:@"/color/:r/:g/:b/:a/" to:self with:@selector(color:)];
// dispatch routes
[RCRouter dispatch:@"/page/welcome/"];
[RCRouter dispatch:@"/color/255/255/255/255/"];
}
- (void)page:(NSDictionary*)params {
NSString *pageTitle = [params objectForKey:@"title"];
}
- (void)color:(NSDictionary*)params {
float red = [[params objectForKey:@"r"] floatValue];
float green = [[params objectForKey:@"g"] floatValue];
float blue = [[params objectForKey:@"b"] floatValue];
}
代表
也可以使用以下命令添加委托给路由器:
[RCRouter addDelegate:self];
以下可选委托方法可用作以下部分:
- (BOOL)allow:(NSString*)route;
- (void)willDispatchRoute:(NSString*)route to:(id)object;
- (void)didDispatchRoute:(NSString*)route to:(id)object;
- (void)noRouteFor:(NSString*)route;