// // YMRouter.h // MSYOUPAI // // Created by YoMi on 2023/11/8. // #import extern NSString *const YMRouterParameterURL; extern NSString *const YMRouterParameterCompletion; extern NSString *const YMRouterParameterUserInfo; /** * routerParameters 里内置的几个参数会用到上面定义的 string */ typedef void (^YMRouterHandler)(NSDictionary *routerParameters); /** * 需要返回一个 object,配合 objectForURL: 使用 */ typedef id (^YMRouterObjectHandler)(NSDictionary *routerParameters); @interface YMRouter : 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:(YMRouterHandler)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:(YMRouterObjectHandler)handler; /** * 取消注册某个 URL Pattern * * @param URLPattern 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 userInfo 附加参数 * @param completion URL 处理完成后的 callback,完成的判定跟具体的业务相关 */ + (void)openURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo completion:(void (^)(id result))completion; /** * 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object * * @param URL 带 Scheme,如 mgj://beauty/3 */ + (id)objectForURL:(NSString *)URL; /** * 查找谁对某个 URL 感兴趣,如果有的话,返回一个 object * * @param URL 带 Scheme,如 mgj://beauty/3 * @param userInfo 附加参数 */ + (id)objectForURL:(NSString *)URL withUserInfo:(NSDictionary *)userInfo; /** * 是否可以打开URL * * @param URL 带 Scheme,如 mgj://beauty/3 * * @return 返回BOOL值 */ + (BOOL)canOpenURL:(NSString *)URL; + (BOOL)canOpenURL:(NSString *)URL matchExactly:(BOOL)exactly; /** * 调用此方法来拼接 urlpattern 和 parameters * * #define YOMI_ROUTE_BEAUTY @"beauty/:id" * [YMRouter generateURLWithPattern:YOMI_ROUTE_BEAUTY, @[@13]]; * * * @param pattern url pattern 比如 @"beauty/:id" * @param parameters 一个数组,数量要跟 pattern 里的变量一致 * * @return 返回生成的URL String */ + (NSString *)generateURLWithPattern:(NSString *)pattern parameters:(NSArray *)parameters; @end