MGJRouter实践总结
MGJRouter基于url-block的方案,存在的缺点:
- 需要在内存中维护url-block的表,内存常驻,组件多了可能会有内存问题
- url的参数传递受到限制,只能传递常规的字符串参数,无法传递非常规参数,如UIImage、NSData等类型
- 没有区分本地调用和远程调用的情况,尤其是远程调用,会因为url参数受限,导致一些功能受限
- 组件本身依赖了中间件,且分散注册使的耦合较多
1.创建路由配置类 HZSSchemeConfig 继承自NSObject
.h类示例
/*设置 * 无参数 */ UIKIT_EXTERN NSString *const kHZSSettingViewController;
.m类示例
NSString *const kHZSSettingViewController = @"HZS://native/HZSSettingViewController";
2.在需要跳转的类中,将路由注册到路由表中
+ (void)load { [MGJRouter registerURLPattern:kHZSSettingViewController toHandler:^(NSDictionary *routerParameters) { HZSSettingViewController *vc = [[HZSSettingViewController alloc] init]; [[UIViewController currentNavigationController] pushViewController:vc animated:YES]; }]; }
3.A类跳转到设置页面 HZSSettingViewController ,并传值 name:zhangsan
[MGJRouter openURL:kHZSSettingViewController withUserInfo:@{@"name":@"zhangsan"} completion:^(id result) {
}];
设置页面,registerURLPattern 方法里可以获取传进来的数据
NSDictionary *userInfo = routerParameters[MGJRouterParameterUserInfo];
4.设置页面 HZSSettingViewController 回传数据到A类,传字符串 1
HZSSettingViewController 类
@property (nonatomic, copy) void (^attentionBlock)(NSString *attentionStatus);
设置页面,registerURLPattern 方法里设置回调
vc.attentionBlock = routerParameters[MGJRouterParameterCompletion];
在需要传值的地方
if (self.attentionBlock) { self.attentionBlock(@"1"); }
A类 openURL 方法的 completion 回调中,可以接收到设置页面回传的值
上面写了跳原生页面的逻辑,下面需要写全局统一的方法,判断跳原生、H5、小程序,后台根据客户端规则传 jumpType 、module 、detailId 即可
/// 页面跳转 /// @param jumpType 0 - 无;1 - 原生;2 - H5;3 - 微信小程序; /// @param module 原生跳转模块,或者是小程序的userName,H5的标题 /// @param detailId 详情页id,或者是小程序的path,H5的地址 + (void)jumpWithType:(NSString *)jumpType module:(NSString *)module detailId:(NSString *)detailId { }
类比文字开头,需要注册以下标识
/* *HZS://native 原生页面 *HZS://h5 h5页面 */ #pragma mark 网页 NSString *const kHZSHomeWebViewController = @"HZS://h5?detailId=http://"; NSString *const kHZSHomeWebHttpsViewController = @"HZS://h5?detailId=https://"; #pragma mark 小程序 NSString *const kHZSMicroProgramePage = @"HZS://microProgramePage";
在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性