YMRouter.h 3.7 KB

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