1. 属性
MGJRouter中有个重要的属性:
@property (nonatomic) NSMutableDictionary *routes;
该属性保存了所有已注册的 URL,其结构类似于:
@{
@"project": @{
@"query": @{
@":keywork": @{
@"_": <__NSGlobalBlock__: 0x104ebc100>
}
}
}
}
2. 注册
现有一个路由:
NSString *URLPattern = @"project://query/:keywork";
调用以下方法:
+ (void)registerURLPattern:(NSString *)URLPattern toHandler:(MGJRouterHandler)handler;
+ (void)registerURLPattern:(NSString *)URLPattern toObjectHandler:(MGJRouterObjectHandler)handler;
MGJRouter会调用以下方法:
- (NSArray*)pathComponentsFromURL:(NSString*)URL;
将路由拆解成数组:
@[
@"project",
@"query",
@":keywork"
]
并将其插入routes
字典中,最后将handler
作为键值保存。
3. 调用
调用以下方法:
+ (void)openURL:(NSString *)URL;
+ (void)openURL:(NSString *)URL completion:(void (^)(id result))completion;
+ (void)openURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo completion:(void (^)(id result))completion;
+ (id)objectForURL:(NSString *)URL;
+ (id)objectForURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo;
MGJRouter会调用以下方法:
- (NSMutableDictionary *)extractParametersFromURL:(NSString *)url matchExactly:(BOOL)exactly;
解析url并从routes
中查询对应的Block,返回以下数据:
@{
@"MGJRouterParameterURL": @"project://query/user",
@"block": <__NSGlobalBlock__: 0x104ebc100>,
@"keywork": @"user"
}
最后,将数据经过处理,形成最终数据:
@{
@"MGJRouterParameterURL": @"project://query/user",
@"keywork": @"user"
}
调用注册的handler,返回数据。