0.H5页面与App原生页面、模块与组件的交互
1.App与App之间的相互访问
2.App内部页面跳转、模块调度与组件加载等
3.推送与通知系统解除硬编码的逻辑,动态访问原生资源,更好的支持通过通知和推送完成动态页面访问和逻辑执行
4.Extension等动态调用主App的资源
5.App实现更复杂的架构MVVM或者是VIPER架构,提供解除业务相互依赖的能力
6.以组件化为目的的工程改造,隔离各个业务,以制作单独的组件
接口预览
Router
NS_ASSUME_NONNULL_BEGIN
@interface SJRouter : NSObject
+ (instancetype)shared;
- (void)handleRequest:(SJRouteRequest *)request completionHandler:(SJCompletionHandler)completionHandler;
@end
NS_ASSUME_NONNULL_END
RouteRequest
NS_ASSUME_NONNULL_BEGIN
@interface SJRouteRequest : NSObject
- (instancetype)initWithURL:(NSURL *)URL;
- (instancetype)initWithPath:(NSString *)requestPath parameters:(nullable SJParameters)parameters;
@property (nonatomic, strong, readonly) NSString *requestPath;
@property (nonatomic, strong, readonly, nullable) SJParameters prts;
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END
RouteHandlerProtocol
NS_ASSUME_NONNULL_BEGIN
typedef id SJParameters;
@protocol SJRouteHandler
+ (NSString *)routePath;
+ (void)handleRequestWithParameters:(nullable SJParameters)parameters topViewController:(UIViewController *)topViewController completionHandler:(nullable SJCompletionHandler)completionHandler;
@end
NS_ASSUME_NONNULL_END
流程
简单的讲,app应用中,路由识别一个请求, 将它分派给对应的handler进行处理。 这个流程非常像发送一个网络请求(拼接参数=>发起请求=>回调)。
同样的,当Router收到下面的请求时(请求视频播放页):










