/
MGJRouter.h
115 lines (100 loc) · 3.5 KB
/
MGJRouter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//
// MGJRouter.h
// MGJFoundation
//
// Created by limboy on 12/9/14.
// Copyright (c) 2014 juangua. All rights reserved.
//
#import <Foundation/Foundation.h>
extern NSString *const MGJRouterParameterURL;
extern NSString *const MGJRouterParameterCompletion;
extern NSString *const MGJRouterParameterUserInfo;
/**
* routerParameters 里内置的几个参数会用到上面定义的 string
*/
typedef void (^MGJRouterHandler)(NSDictionary *routerParameters);
/**
* 需要返回一个 object,配合 objectForURL: 使用
*/
typedef id (^MGJRouterObjectHandler)(NSDictionary *routerParameters);
@interface MGJRouter : NSObject
/**
* 注册 URLPattern 对应的 Handler,在 handler 中可以初始化 VC,然后对 VC 做各种操作
*
* @param URLPattern 带上 scheme,如 mgj://beauty/:id
* @param handler 该 block 会传一个字典,包含了注册的 URL 中对应的变量。
* 假如注册的 URL 为 mgj://beauty/:id 那么,就会传一个 @{@"id": 4} 这样的字典过来
*/
+ (void)registerURLPattern:(NSString *)URLPattern toHandler:(MGJRouterHandler)handler;
/**
* 注册 URLPattern 对应的 ObjectHandler,需要返回一个 object 给调用方
*
* @param URLPattern 带上 scheme,如 mgj://beauty/:id
* @param handler 该 block 会传一个字典,包含了注册的 URL 中对应的变量。
* 假如注册的 URL 为 mgj://beauty/:id 那么,就会传一个 @{@"id": 4} 这样的字典过来
* 自带的 key 为 @"url" 和 @"completion" (如果有的话)
*/
+ (void)registerURLPattern:(NSString *)URLPattern toObjectHandler:(MGJRouterObjectHandler)handler;
/**
* 取消注册某个 URL Pattern
*
* @param URLPattern
*/
+ (void)deregisterURLPattern:(NSString *)URLPattern;
/**
* 打开此 URL
* 会在已注册的 URL -> Handler 中寻找,如果找到,则执行 Handler
*
* @param URL 带 Scheme,如 mgj://beauty/3
*/
+ (void)openURL:(NSString *)URL;
/**
* 打开此 URL,同时当操作完成时,执行额外的代码
*
* @param URL 带 Scheme 的 URL,如 mgj://beauty/4
* @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关
*/
+ (void)openURL:(NSString *)URL completion:(void (^)(id result))completion;
/**
* 打开此 URL,带上附加信息,同时当操作完成时,执行额外的代码
*
* @param URL 带 Scheme 的 URL,如 mgj://beauty/4
* @param parameters 附加参数
* @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关
*/
+ (void)openURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo completion:(void (^)(id result))completion;
/**
* 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object
*
* @param URL
*/
+ (id)objectForURL:(NSString *)URL;
/**
* 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object
*
* @param URL
* @param userInfo
*/
+ (id)objectForURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo;
/**
* 是否可以打开URL
*
* @param URL
*
* @return
*/
+ (BOOL)canOpenURL:(NSString *)URL;
/**
* 调用此方法来拼接 urlpattern 和 parameters
*
* #define MGJ_ROUTE_BEAUTY @"beauty/:id"
* [MGJRouter generateURLWithPattern:MGJ_ROUTE_BEAUTY, @[@13]];
*
*
* @param pattern url pattern 比如 @"beauty/:id"
* @param parameters 一个数组,数量要跟 pattern 里的变量一致
*
* @return
*/
+ (NSString *)generateURLWithPattern:(NSString *)pattern parameters:(NSArray *)parameters;
@end