是否有针对Objective-C的Sinatra样式路由库/类?

时间:2011-05-31 15:30:21

标签: objective-c

是否有与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实现,几周后创建/公开了许多高级库。

1 个答案:

答案 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;