Swiftui 路由设计基础2

最近尚有点时间,我会一篇篇讲述一下我对swiftui, swift, flutter的各种理解.

上周看到swiftui的路由设计还是有挺多人看的,本篇就再延伸一点,将以探索的思路跟读者聊天如何swiftui路由的进一步优化

上一篇文章戳这里Swiftui 路由设计基础 - 掘金 (juejin.cn)

从设计权限校验展望

权限校验是指我们在做路由跳转的时候可能会需要一些前置判断,比如判断聊天室中,判断自己本身是否是聊天室成员来决定能否跳转聊天室.比如个人资料编辑页面需要在登录状态下才能够跳转等等.甚至有些是异步的请求,根据服务器数据来判断权限等等.

设计同步权限校验

我们可能第一时间想到的就是在路由跳转行为前增加条件判断即可.比如下面这样:

简单直观,也有效

设计异步权限校验

但是,有些时候我们需要异步的一些权限判断,比如聊天室成员判断等,这时候,按照之前的思路,我们可以增加一些异步的判断请求等等.比如下面这样

修改成await权限

这时候,想想唉,既然已经是异步了,抽成await也未尝不可,我们继续往下抽

架构重构一下

再回过头看,感觉这样的代码又不是特别好,enum不支持extension,所有的路由路径都写在RouterDestination里,不利于模块化开发.那我们来改造一下吧

考虑一下如何抽出子模块,这里我将RouterDestination协议化,子模块路径遵循该协议,另外抽出行为模块协议,做遍历及注册使用. 模块路径方面仍然使用的是enum(enum的好处任然是不言而喻的),同时我将路由权限下放给子模块,这样,可以直接省去模块路径权限判断的额外代码. 这里,读者可以看到,子模块的权限就变得十分强大了,可以自行决定是否同步权限,异步权限,操作的自由性大大提高

远程路由解析

之前我说过远程路由需要与本地路由拆分,这里我也适当增加一些远程路由解析的思路 同样还是模块化的延伸,将远程路由解析下放到各个本地路由即可.

结尾

项目想要做大做强,项目的规范化是必不可少的,模块化路由也是其中重要的一环,希望本篇对各位读者能有小小的帮助.

相关推荐
MaoJiu4 小时前
Flutter造轮子系列:flutter_permission_kit
flutter·swiftui
大熊猫侯佩10 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩10 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩10 小时前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
大熊猫侯佩10 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift
大熊猫侯佩1 天前
SwiftUI 中如何花样玩转 SF Symbols 符号动画和过渡特效
swiftui·swift·apple
大熊猫侯佩1 天前
SwiftData 共享数据库在 App 中的改变无法被 Widgets 感知的原因和解决
swiftui·swift·apple
大熊猫侯佩1 天前
SwiftUI 在 iOS 18 中的 ForEach 点击手势逻辑发生改变的解决
swiftui·swift·apple
大熊猫侯佩2 天前
SwiftUI 如何取得 @Environment 中 @Observable 对象的绑定?
swiftui·swift·apple