JLChen
2021-05-18 a869383e163a18cdedcf587383c1eca043129754
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
116
117
//
//  DHRouter.h 在MGHRouter外面加一层 方便以后置换
//  Pods
//
//  Created by Anson on 2017/5/18.
//
//
 
#import <Foundation/Foundation.h>
 
extern NSString *const DHRouterParameterURL;
extern NSString *const DHRouterParameterCompletion;
extern NSString *const DHRouterParameterUserInfo;
 
/**
 *  routerParameters 里内置的几个参数会用到上面定义的 string
 */
typedef void (^DHRouterHandler)(NSDictionary *routerParameters);
 
/**
 *  需要返回一个 object,配合 objectForURL: 使用
 */
typedef id (^DHRouterObjectHandler)(NSDictionary *routerParameters);
 
@interface DHRouter : 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:(DHRouterHandler)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:(DHRouterObjectHandler)handler;
 
/**
 *  取消注册某个 URL Pattern
 *
 *  @param URLPattern 已注册的url
 */
+ (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 userInfo   附加参数
 *  @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关
 */
+ (void)openURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo completion:(void (^)(id result))completion;
 
/**
 * 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object
 *
 *  @param URL 已注册的路由url
 */
+ (id)objectForURL:(NSString *)URL;
 
/**
 * 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object
 *
 *  @param URL 已注册的路由url
 *  @param userInfo 用户参数
 */
+ (id)objectForURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo;
 
/**
 *  是否可以打开URL
 *
 *  @param URL 已注册的路由url
 *
 *  @return YES or NO
 */
+ (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 Route url
 */
+ (NSString *)generateURLWithPattern:(NSString *)pattern parameters:(NSArray *)parameters;
 
@end