恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Shallows核心概念完整图解:Storage<Key, Value>与三大协议如何重塑Swift缓存设计

  • 首页
  • 资讯中心
  • /
  • Shallows核心概念完整图解:Storage<Key, Value>与三大协议如何重塑Swift缓存设计

相关资讯

strfry生产部署实战:Nginx+Let‘s Encrypt+systemd,5步上线高可用Nostr中继 2026/8/25 8:39:25
零基础转行网络安全:学习路径与求职指南 2026/8/25 8:39:25
为什么高速子弹会穿过薄墙?Box2DSharp连续碰撞检测TOI源码详解 2026/8/25 8:34:25

最新资讯

rosbag2 从零跑通 ROS2 录制回放:安装、录制与回放实用指南
Ruffle:用 Flash 模拟器,让老 SWF 重新跑起来
UAObfuscatedString Swift完整使用指南:如何绕开下划线代表空格的隐藏陷阱
Windows11 休眠与睡眠设置:新手电源管理实操指南
使用GTFONow前必读:--risk激进模式的风险与真实渗透测试安全合规指南
数据库面试核心考点与优化实践全解析

今日推荐

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南
洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

Shallows核心概念完整图解:Storage<Key, Value>与三大协议如何重塑Swift缓存设计

发布时间:2026/8/25 8:39:25
Shallows核心概念完整图解:Storage<Key, Value>与三大协议如何重塑Swift缓存设计 Shallows核心概念完整图解StorageKey, Value与三大协议如何重塑Swift缓存设计【免费下载链接】Shallows Your lightweight persistence toolbox项目地址: https://gitcode.com/gh_mirrors/sh/ShallowsShallows 浅滩是一个 Swift 轻量级持久化工具箱lightweight persistence toolbox它的核心是泛型类型StorageKey, Value与三大存储协议让开发者用统一的接口组合出内存缓存、磁盘缓存等多级缓存方案。本文以图解方式带你 10 分钟看懂 Shallows 的核心概念为什么一个空壳结构体 三个协议就能重塑 Swift 缓存设计。一、Shallows 是什么一个可组合的 Swift 缓存工具箱Shallows 本身不实现任何存储逻辑它是一个抽象层特性说明核心类型StorageKey, Value类型擦除的泛型存储容器设计风格组件化、可组合composition典型用途多级缓存、持久化、跨存储层的数据管道安装方式Swift Package Manager或git clone https://gitcode.com/gh_mirrors/sh/Shallows一句话概括Shallows 给你一套乐高积木——每个存储层都是积木块协议是接口组合操作是拼接方式。二、核心类型 StorageKey, Value一个无逻辑的空容器很多新手会以为Storage里藏着一堆读写逻辑其实恰恰相反——它只是一个持有闭包的空壳源码Sources/Shallows/Storage.swift┌──────────────────────────────┐ │ StorageKey, Value │ │ │ │ storageName: String │ │ _retrieve ──→ ReadOnlyStorage只读闭包 │ _set ────────→ WriteOnlyStorage只写闭包 │ │ │ retrieve(forKey:completion:)│ │ set(_:forKey:completion:) │ └──────────────────────────────┘三个关键设计点全异步retrieve和set都通过 completion 回调返回结果可失败fallible返回值统一包装在ShallowsResult中成功.success/ 失败.failure(error)缓存未命中也是失败由你自己决定兜底策略逻辑可注入你可以传任意读写闭包构造它因此它能包住内存、磁盘、网络、NSCache 任何实现。let storage MemoryStorageString, Int().asStorage() // StorageString, Int storage.retrieve(forKey: some-key) { result in /* ... */ }这里的.asStorage()就是类型擦除入口任何遵循StorageProtocol的实现都能归一化成统一的StorageKey, Value。三、三大协议读、写、全功能的分层抽象Shallows 的协议体系是一棵小树理解它就理解了整个库源码Sources/Shallows/Storage.swift、ReadOnlyStorage.swift、WriteOnlyStorage.swiftReadableStorageProtocol ──┐ (retrieve Key/Value 关联类型) ├──→ StorageProtocol (retrieve set) WritableStorageProtocol ──┘ │ 类型擦除包装器 ReadOnlyStorageKey, Value ← asReadOnlyStorage() WriteOnlyStorageKey, Value ← asWriteOnlyStorage() StorageKey, Value ← asStorage()协议必须实现的方法包装成适用场景ReadableStorageProtocolretrieve(forKey:completion:)ReadOnlyStorage只读数据源如不可变配置WritableStorageProtocolset(_:forKey:completion:)WriteOnlyStorage只写管道如埋点落盘StorageProtocol继承前两者retrievesetStorage完整读写存储这种分层的妙处在于读写能力是独立维度。你不需要暴露写权限就调用asReadOnlyStorage()调用方拿到的ReadOnlyStorage在类型层面根本没有set方法——用编译器而不是运行时来保护数据安全。 内置实现也遵循同一套协议MemoryStorageSources/Shallows/MemoryStorage.swift、DiskStorageSources/Shallows/DiskStorage/DiskStorage.swift、NSCacheStorageSources/Shallows/NSCacheStorage.swift它们都只是协议的一种落地。四、三大组合模式combined / backed / pushingShallows 最核心的概念是组合composition把两个存储层拼成多级缓存。三种组合对应不同的数据流向源码Sources/Shallows/Composition.swift组合方法读retrieve写set典型场景.combined(with:)先查前层未命中查后层并拉回前层同时写入前层和后层内存 磁盘的 L1/L2 缓存.backed(by:)先查前层未命中查后层只写前层不推后层临时缓存磁盘只作只读后备.pushing(to:)只查前层写入前层并推到后层前层可重建后层负责持久化以最常见的combined(with:)为例一次完整的读 未命中流程用户请求 key │ ▼ MemoryStorage ──命中──是──→ 直接返回 │否 ▼ DiskStorage ──命中──是──→ 写入 MemoryStorage回填→ 返回 │否 ▼ 返回 failure可接 fallback 兜底写操作的流程先写MemoryStorage成功后再推到DiskStorage任一层失败即中止。一个真实的组合写法摘自官方 READMElet efficient MemoryStorageFilename, UIImage() .combined(with: imageStorage) // 内存 磁盘二级缓存细节彩蛋️组合后的storageName会自带动画式命名——双向拉取推送是A-B仅从后层拉取是A-B仅推送是A-B互不影响是A-B。调试日志里一眼就能看出缓存流向。五、变换能力mapKeys / mapValues / singleKeyStorage实例还能变形类型系统会跟着精确变化mapValues(to:transformIn:transformOut:)值类型双向转换。例如磁盘存Data读出转UIImage写入再转回Data得到StorageFilename, UIImagemapKeys键类型转换配合RawRepresentable可用字符串枚举直接当 keysingleKey(_:)把键固定为Void变成一个只存一条记录的单例存储——配置项的理想形态let settings DiskStorage.main.folder(settings, in: .applicationSupportDirectory) .mapJSONDictionary() .singleKey(settings) // StorageVoid, [String : Any]此外还有fallback(with:)/defaulting(to:)做错误兜底、zip()把两个存储横向配对、makeSyncStorage()得到同步版本适合脚本与测试。六、自己动手只需两个方法就能扩展 Shallows因为一切归于协议自定义存储的门槛极低遵循StorageProtocol实现retrieve和set两个方法注意自行保证线程安全然后.asStorage()即可接入整套组合、变换体系。只读数据源甚至只需实现retrieve遵循ReadOnlyStorageProtocol即可。库很小、组件化官方也鼓励你直接读源码自己搭核心文件都在Sources/Shallows/下——协议与Storage在 Storage.swift组合逻辑在 Composition.swift磁盘层在 DiskStorage/DiskStorage.swift测试用例含组合行为的完整断言在Tests/ShallowsTests/CompositionSpec.swift。七、总结一张表看懂 Shallows 设计哲学概念关键词记住一句话StorageKey, Value类型擦除它不存储它只是读闭包 写闭包的外壳三大协议能力分层读、写是独立维度编译器帮你守住只读边界combined/backed/pushing组合数据流向不同缓存行为不同mapKeys/mapValues变换每层变换都精确改变泛型参数自定义存储扩展点实现两个方法即插即用Shallows 的哲学可以浓缩为一句话把缓存在哪和怎么用彻底解耦——存储位置可替换、可叠加而你的业务代码始终面对同一个StorageKey, Value接口。这正是它轻量却能重塑 Swift 缓存设计的原因。⛵【免费下载链接】Shallows Your lightweight persistence toolbox项目地址: https://gitcode.com/gh_mirrors/sh/Shallows创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号