Существует ли библиотека / класс маршрутизации в стиле Синатры для Objective-C? - PullRequest
1 голос
/ 31 мая 2011

Существует ли эквивалентная маршрутизация URL-адресов в стиле Синатры для использования с target-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 Ответ

5 голосов
/ 01 июня 2011

Я создал реализацию этого на 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...