本文主要是介绍MGJRouter原理解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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,返回数据。
这篇关于MGJRouter原理解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!