OC路由实现
通过路由可以实现模块间的通信以及解耦合。
可以通过URL实现路由。
URL
基本格式:
scheme://host:port/path?query#fragment
参数的使用。
一些宏定义:
NSString *const LHRURLHostJumpViewController = @"jump.vc.lhrouter"; /// vc跳转
NSString *const LHRURLHostJumpViewController = @"call.service.lhrouter"; ///服务通信
NSString *const LHRURLFragmentViewControlerEnterModePush = @"push";
NSString *const LHRURLFragmentViewControlerEnterModeModal = @"modal";
NSString *const LHRURLJumpViewControllerAnimatedYES = @"YES";
NSString *const LHRURLJumpViewControllerAnimatedNO= @"NO";
-
host:代表模块。
模块注册时可分为不同类型注册, 决定路由类型跳转或者服务通信,可以通过host做标识,我在这里用特定的host标示跳转和通信。
-
默认
jump.vc.lhrouter
标示为vc跳转,统一跳转,需要外部注册模块和安卓保持统一 -
默认
call.service.lhrouter
应用内部service通信。 -
host 也支持外部注册:通过
LHRouterConfig
配置
-
- path
-
例:
lh://main/towViewPage/?#push"
- main为外部注册host,hostd代表业务模块,默认类型为push。towViewPage为key,根据key找到注册的控制器。key为了保持安卓iOS双端统一。
-
例:
lh://call.service.lhrouter/LHTestService/sum:b:
- host为
call.service.lhrouter
调用相关服务的方法 , 路由传递传递服务类名和方法。 - 用于和内部服务通信
- host为
-
-
query传值
- fragment跳转类型 push or modal
外部注册host:
@interface LHRouterConfig : NSObject
+ (instancetype)shareInstance;
/// 注册跳转host 不同的业务模块需要注册
- (void)registerJumpHost:(NSString *)host;
/// 注册服务通信host
- (void)registerServiceHost:(NSString *)host;
/// 注销host
- (void)unregisterHost:(NSString *)host;
///获取路由类型
- (LHRouterHostType)getRouterHostType:(NSString *)host;
@end
路由方法调用:
+ (void)openURL:(NSURL *)URL;
+ (void)openURL:(NSURL *)URL
withParams:(NSDictionary<NSString *, id> *)params;
+ (void)openURL:(NSURL *)URL
withParams:(NSDictionary<NSString *, id> *)params
callBack:(void(^)(NSString *pathComponentKey, id obj, id returnValue))callBack; // callBack 可以获取服务的返回值,或者在路由跳转后做操作
传值
可以通过字典传参,如果url的query也有传参,最中把参数整合在一个字典里面。
demo以及集成
集成: pod 'LHRoutes'