可直接搬进你项目的10个iOS工具扩展:CompositionalDiffablePlayground列表Section、Cell出队与随机数据复用辅助方法

📅 2026/8/23 12:14:07
可直接搬进你项目的10个iOS工具扩展:CompositionalDiffablePlayground列表Section、Cell出队与随机数据复用辅助方法
可直接搬进你项目的10个iOS工具扩展CompositionalDiffablePlayground列表Section、Cell出队与随机数据复用辅助方法【免费下载链接】CompositionalDiffablePlayground.iosExamples showing Compositional Layout, Diffable Data Sources and more!项目地址: https://gitcode.com/gh_mirrors/co/CompositionalDiffablePlayground.iosCompositionalDiffablePlayground是一个开源的 iOS 示例项目用大量可运行案例演示UICollectionView的 Compositional Layout组合式布局与 Diffable Data Source可 Diff 数据源。更实用的是它Extensions目录里藏着 10 个可以直接复制进你项目的 Swift 工具扩展一行代码搭出列表 Section、泛型 Cell 注册与出队、随机数据一键填充——都是日常写列表页面时最高频的脏活累活。这篇文章带你逐个过一遍告诉你每个 iOS 工具扩展解决什么问题、怎么用。 10个扩展扩展一览表#扩展文件一句话价值1NSCollectionLayoutSectionExtension.swift一行代码生成标准列表/大卡片 Section2NSCollectionLayoutItemExtension.swift快速创建撑满宽度的 Item3NSCollectionLayoutDimensionExtension.swift按目标尺寸自动算出自适应列数4UICollectionViewCompositionalLayoutExtension.swift一行生成完整 List 布局5UICollectionReusableViewExtension.swift类名即复用标识符永不再写错字符串6UICollectionViewExtension.swiftregister泛型注册 Cell/Header/Footer7UICollectionViewExtension.swiftdequeue类型安全出队告别强制类型转换8ArrayExtension.swift用闭包表达式批量造数组9UIColorExtension.swift生成好看的随机颜色10ColorsSnapshotExtension.swift往数据源快照里灌随机数据所有文件都在项目Extensions目录下每个文件只有 10~40 行没有第三方依赖复制即用。 布局三件套列表 Section 一行搞定1. 列表 Section 与网格 Section 工厂方法NSCollectionLayoutSectionExtension.swift 提供两个静态工厂方法.listSection()生成带上下左右内边距、估算行高的标准列表 Section——就是那种一行一条、像系统表格的布局.largeGridSection()两列大卡片网格带默认 5pt 间距。在ViewControllers/ListViewController.swift里它这样出场整个 List 页面仅用.listSection()就搭好配合第 4 个扩展列表布局从十几行缩减到一行collectionView.setCollectionViewLayout(UICollectionViewCompositionalLayout.listLayout(), animated: false)SystemListViewController则用.listSection(withEstimatedHeight:)指定行高三秒搭出系统分组列表样式。2. 撑满宽度的 Item 快捷创建NSCollectionLayoutItemExtension.swift 里有两个高频小方法.withEntireSize()宽高各占 100% 的 Item做整行横幅、Onboarding 大卡片时直接用.entireWidth(withHeight:)宽度撑满 自定义高度适合做吸顶 Header、列表行。比如OnboardingLayoutViewController创建整屏引导页 Item 时一个.withEntireSize()顶掉原来四行NSCollectionLayoutSize写法。3. 按目标尺寸自动算列数响应式布局最常见的痛点是想让每格固定约 100pt 宽但 fractionalWidth 要的是比例。NSCollectionLayoutDimensionExtension.swift 里的fractionalWidth(forTargetSize:inEnvironment:)帮你反推传入目标像素宽度和环境信息它根据容器实际宽度算出列数返回正确的比例维度。在 iPhone 上 3 列、iPad 上 5 列代码零改动——ResponsiveLayoutExample的响应式网格就是靠它实现的。4. 一行生成完整 List 布局UICollectionViewCompositionalLayoutExtension.swift 只有 5 行核心代码static func listLayout() - UICollectionViewCompositionalLayout内部把第 1 条的.listSection()包成完整布局。以后任何页面要列表布局一句UICollectionViewCompositionalLayout.listLayout()收工。 注册与出队最快消除样板代码的方法5. 类名即复用标识符UICollectionReusableViewExtension.swift 给所有可复用视图一个静态属性reuseIdentifier默认返回类名本身。再也不用手写ArticleCell这种魔法字符串——类一改名标识符自动跟着变杜绝注册标识符和出队标识符对不上这个经典崩溃源。6. 泛型注册Cell / Header / Footer 全覆盖UICollectionViewExtension.swift 提供四个泛型register方法编译器帮你保证类型一致register(cell: T.self)—— 注册 Cell代码型 Cellregister(cellFromNib: T.Type)—— 注册XIB 型 Cell自动按类名找同名 NIBregister(header:)/register(footer:)—— 注册 Section 头/尾视图。JokesViewController里的用法一目了然collectionView.register(header: SimpleHeaderView.self) collectionView.register(header: ActionButtonHeader.self)7. 类型安全出队告别as!同文件的dequeue(for:)方法让出队代码从collectionView.dequeueReusableCell(withReuseIdentifier: X, for: indexPath) as! XCell变成一行且类型永远正确let cell: ImageViewCell collectionView.dequeue(for: indexPath)PhotosViewController、IndieAppNewsViewController里所有出队都换成了这个写法编译期就能抓住类型错误运行时的强制转换崩溃从此与列表页面绝缘。 随机数据三件套瞬间填满你的 CollectionView写列表页最烦的就是演示数据从哪来。这三个扩展组合起来不需要任何真实数据界面立刻有内容。8. 闭包表达式批量造数组ArrayExtension.swift 新增了一个Array(repeatingExpression:count:)初始化器每调用一次闭包就追加一个新元素。注意它不是重复同一个实例而是每次生成全新对象——MultiSelectViewController用它一次造出 50 个独立的多选条目let items Array(repeatingExpression: SelectableItem(), count: 50)9. 生成不土的随机颜色UIColorExtension.swift 的UIColor.random()是细节控它只在0~150和230~359色相区间取随机值主动避开了 150°~230° 那段灰蒙蒙的土色区保证随机出来的颜色鲜亮耐看。Model/Color.swift等示例数据模型直接用它。10. 数据源快照一键灌随机数据ColorsSnapshotExtension.swift 的addRandomItems(count:to:)把第 8、9 条串起来批量生成随机颜色 Item追加到指定 Section 的 Diffable 快照中。LazyGridViewController用它模拟滚动到底部再加载 12 条的分页效果SystemListViewController则一次性给 3 个 Section 各灌 10 条。做 Demo、做 UI 预览、写单元测试全靠它省时间。 附赠两个小礼物NSDirectionalEdgeInsetsExtension.swift.uniform(size: 5)四边统一间距外加.small()/.medium()/.large()三档预设布局代码里的间距从此统一UIDeviceExtension.swift一个isIpad计算属性ViewController.swift中多处用它做 iPad/iPhone 布局分流iPad 显示整行 Item、iPhone 显示卡片流。✅ 如何把这些 iOS 工具扩展搬进你的项目直接复制文件把Extensions目录中需要的文件拷入你的 Target无需改任何配置——全是纯 Swift 扩展无第三方依赖按需取用写列表页第 1、4、5、6、7 条是核心组合做 Demo/预览加第 8、9、10 条注意命名约定第 6 条的 XIB 注册方法约定NIB 文件名 Cell 类名搬用时保持这个命名即可协议配套泛型 NIB 注册依赖Protocols/CellFromNib.swift中的CellFromNib协议空协议靠扩展按类名找 NIB建议一并复制。写在最后这 10 个扩展单看都很小组合起来却覆盖了布局搭建 → 视图注册 → 数据填充的完整链路listLayout()搭架子、dequeue(for:)出细胞、addRandomItems灌数据一个标准列表页面的核心代码能砍掉一半以上。如果你正在用 Compositional Layout 和 Diffable Data Source建议把Extensions目录当成随身工具箱挑需要的直接搬走用起来。【免费下载链接】CompositionalDiffablePlayground.iosExamples showing Compositional Layout, Diffable Data Sources and more!项目地址: https://gitcode.com/gh_mirrors/co/CompositionalDiffablePlayground.ios创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考