首页/新闻资讯/正文详情

SwiftGen colors 模板 literals-swift4:用 colorLiteral 生成 Swift 4 颜色常量的完整指南

发布时间:2026/9/25 2:56:01 来源:云帆数科 栏目:资讯中心
SwiftGen colors 模板 literals-swift4:用 colorLiteral 生成 Swift 4 颜色常量的完整指南
开发工具代码生成【免费下载链接】SwiftGenThe Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs!项目地址https://gitcode.com/gh_mirrors/sw/SwiftGen点击查看免费下载本篇技术指南以 SwiftGen 仓库自带的colors/literals-swift4.stencil模板为核心讲解如何用#colorLiteral字面量生成可直接在 Xcode 中预览的 Swift 4 颜色常量涵盖配置方法、三个自定义参数enumName、forceFileNameEnum、publicAccess的完整语义并结合模板源码与测试用例解释其底层实现。读完本文你将掌握在swiftgen配置文件中引用该模板、按需定制输出以及理解生成代码背后工作原理的完整能力。模板概览literals-swift4是 SwiftGen 为Swift 4语言版本预置的颜色模板之一模板文件位于 Sources/SwiftGenCLI/templates/colors/literals-swift4.stencil对应的官方文档为 Documentation/templates/colors/literals-swift4.md。属性值模板文件名colors/literals-swift4.stencil配置示例见下方「配置文件中的引用方式」目标语言Swift 4模板作者Olivier Halligon配置文件中的引用方式在swiftgen.yml中通过templateName引用该模板colors: inputs: path/to/colors-file.txt outputs: templateName: literals-swift4 output: Colors.swift关于配置文件inputs、outputs、templateName等键的完整语法可参见 Documentation/ConfigFile.md。何时选择这个模板原文档明确给出了三条适用判据需要生成 Swift 4 代码时使用如果你的项目最低部署版本是 Swift 5则应改用literals-swift5两者输出结构一致详见 literals-swift5 文档输入文件中存在多个颜色名共用同一个色值的场景例如articleFootnote与themeCyan都对应0xff66ccff也能正确生成每个名字各自产出一个static let常量生成的常量使用#colorLiteral字面量在 Xcode 的代码编辑器中可以直接看到色块预览这是它区别于同语言的 swift4 模板后者生成ColorName(rgbaValue:)包装结构的核心特点。自定义参数详解使用该模板时可以在swiftgen调用或配置文件中通过params覆盖以下参数参数名默认值说明enumNameColorName修改承载全部颜色常量的enum类型名forceFileNameEnum无不设置设置后即使输入只有一个文件也会额外生成以文件名命名的嵌套enumpublicAccess无不设置设置后生成的常量标记为public否则为internal特殊用法直接扩展 UIColor / NSColor原文档特别强调了一个值得注意的行为如果你把enumName设为UIColoriOS/tvOS/watchOS或NSColormacOS那么颜色常量将直接生成在UIColor/NSColor类型的扩展extension中而不会再创建一个独立的enum类型来做命名空间隔离。这一点可以在模板源码中得到印证。literals-swift4.stencil 中的平台分支逻辑如下#if os(macOS) import AppKit {% if enumName ! NSColor %} {{accessModifier}} enum {{enumName}} { } {% endif %} #elseif os(iOS) || os(tvOS) || os(watchOS) import UIKit {% if enumName ! UIColor %} {{accessModifier}} enum {{enumName}} { } {% endif %} #endif也就是说只有enumName不是UIColor/NSColor时才会先声明一个空enum作为命名空间而当enumName恰好等于平台类型时该enum声明被跳过后续的extension {{enumName}}便直接作用于系统类型。在 Tests/TemplatesTests/ColorsTests.swift 中testLiteralsSwift4()正是用enumNameUIColor作为自定义参数变体suffix-customName来验证这条路径的对应的黄金文件为 Sources/TestUtils/Fixtures/Generated/Colors/literals-swift4/defaults-customName.swift。生成的代码长什么样以默认参数enumNameColorName为例模板对输入色值0x339666ffArticleBody与0xff66ccffArticleFootnote生成的核心片段为internal extension ColorName { /// 0x339666ff (r: 51, g: 150, b: 102, a: 255) static let articleBody #colorLiteral(red: 0.2, green: 0.588235, blue: 0.4, alpha: 1.0) /// 0xff66ccff (r: 255, g: 102, b: 204, a: 255) static let articleFootnote #colorLiteral(red: 1.0, green: 0.4, blue: 0.8, alpha: 1.0) }完整的生成结果包含import平台分支、swiftlint注释、文件名嵌套枚举等全部内容可查看黄金文件 Sources/TestUtils/Fixtures/Generated/Colors/literals-swift4/defaults.swift其中还包含private这类 Swift 保留字被反引号转义为private的实际样例。代码结构拆解完整生成文件遵循以下结构对应 defaults.swift头部注释// Generated using SwiftGen平台导入与命名空间声明macOS 分支import AppKitinternal enum ColorName { }iOS/tvOS/watchOS 分支import UIKitinternal enum ColorName { }// MARK: - Colors分隔与swiftlint:disable指令internal extension ColorName { ... }中逐条输出每个颜色的static let常量。使用示例生成之后在业务代码中直接按名字引用静态常量即可无需任何字符串// To reference a color, simpy reference its static instance by name: let title ColorName.articleBody let footnote ColorName.articleFootnote由于是#colorLiteral在 Xcode 里悬停或编辑时可以看到真实的色块预览。若采用了enumName: UIColor的扩展方式则可以写成UIColor.articleBody直接调用。底层实现原理源码级解析色值如何换算成字面量模板对每个颜色执行两步 Stencil 过滤器链{% macro h2f hex %}{{hex|hexToInt|int255toFloat}}{% endmacro %}hexToInt把33这样的两位十六进制字符串转成整数51int255toFloat把 0–255 的整数归一化为 0.0–1.0 的浮点数51 / 255 ≈ 0.2。随后拼装成#colorLiteral(red: ..., green: ..., blue: ..., alpha: ...)。变量名的处理链为swiftIdentifier:pretty|lowerFirstWord|escapeReservedKeywords这就是为什么ArticleBody会变成articleBody首字母小写、private会被反引号包裹。上下文数据从哪来模板消费的palettes上下文由 Sources/SwiftGenKit/Stencil/ColorsParserContext.swift 构造每个 palette 按名称排序后映射出name与colors数组每个 color 又展开为name/red/green/blue/alpha五个十六进制字符串分量。完整字段说明与 YAML 示例见 Documentation/SwiftGenKit Contexts/colors.md。多文件与 forceFileNameEnum 的分支逻辑模板核心分支literals-swift4.stencil{% if palettes.count 1 or param.forceFileNameEnum %} {% set accessPrefix %}{{accessModifier}} {% endset %} {% for palette in palettes %} enum {{palette.name|swiftIdentifier:pretty|escapeReservedKeywords}} { {% filter indent:2, ,true %}{% call enumBlock palette.colors accessPrefix %}{% endfilter %} } {% endfor %} {% else %} {% call enumBlock palettes.first.colors %} {% endif %}当输入了多个文件palettes.count 1时会自动为每个文件生成一个以文件名命名的嵌套enum分组当只有一个文件但设置了forceFileNameEnum时同样强制生成该嵌套分组否则颜色常量直接平铺在ColorName扩展里即上面「生成的代码长什么样」展示的形式。输入文件类型与颜色格式literals-swift4模板本身不负责解析输入解析由 Sources/SwiftGenKit/Parsers/Colors/ColorsParser.swift 完成。它注册了四类子解析器因此支持以下输入格式详见 Documentation/Parsers/colors.mdCLRmacOS 的 NSColorList 调色板文件JSON根对象中键为颜色名、值为十六进制色值的简单结构TXT每行名称: 色值色值可为十六进制也可引用文件内其他颜色名XMLAndroid 的colors.xml。默认过滤器为[^/]\.(?i:clr|json|txt|xml)$可通过filter选项自定义。解析选项colorFormat默认rgba每两位十六进制依次为 R/G/B/A也支持argb顺序这在ColorFormat枚举rgba/argb与Option.colorFormat定义处可以确认。测试如何保障输出稳定模板行为由 Tests/TemplatesTests/ColorsTests.swift 中的testLiteralsSwift4()守护它会对empty、defaults、multiple三种上下文跑模板并针对defaults额外生成-customNameenumNameUIColor、-publicAccess、-forceFileNameEnum三种参数变体与Sources/TestUtils/Fixtures/Generated/Colors/literals-swift4/目录下的黄金文件逐一比对。这意味着你通过参数定制输出的每一种行为都有对应的测试覆盖与可参考的完整产物示例。小结literals-swift4是 SwiftGen 为 Swift 4 项目提供的「所见即所得」颜色生成方案它以#colorLiteral让颜色在 Xcode 中直接可视化同时通过enumName含直接扩展UIColor/NSColor的特殊路径、forceFileNameEnum、publicAccess三个参数覆盖了命名空间、多文件分组与访问控制三大常见定制需求。配合 ConfigFile.md 中的params机制即可在swiftgen.yml中一键启用。赞分享开发工具代码生成【免费下载链接】SwiftGenThe Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs!项目地址https://gitcode.com/gh_mirrors/sw/SwiftGen点击查看免费下载相关推荐SwiftGen colors/literals-swift5 模板实战指南用 colorLiteral 生成 Swift 5 类型安全颜色常量SwiftGen colors/literals swift5 模板实战指南用 colorLiteral 生成 Swift 5 类型安全颜色常量 本指南以 S开发工具代码生成Wagtail 2.16.1 补丁版深度解析六个关键 Bug 修复、自动重定向与批量操作源码探秘Wagtail 2.16.1 补丁版深度解析六个关键 Bug 修复、自动重定向与批量操作源码探秘 Wagtail 2.16.1 发布于 2022 年 2 月开发工具代码生成SwiftGen Core Data swift4 模板详解为 Xcode 数据模型生成类型安全的 Swift 4 代码SwiftGen Core Data swift4 模板详解为 Xcode 数据模型生成类型安全的 Swift 4 代码 导读 本文聚焦 SwiftGen 内开发工具代码生成上一篇3步掌握Cutadapt测序数据预处理完整指南下一篇130亿参数颠覆行业认知腾讯混元A13B重新定义大模型效率标准创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

cube-ui Validator 表单校验组件完全指南:规则、消息模板与异步校验
cube-ui Validator 表单校验组件完全指南:规则、消息模板与异步校验

前端UI组件移动开发 【免费下载链接】cube-ui :large_orange_diamond: A fantastic mobile ui lib implement by Vue 项目地址: https://gitcode.com/gh_mirrors/cu/cube-ui 点击查看 免费下载 导读 cube-validator 是 cube-ui(基于 Vue 的移动端组件库… · 2026/9/25 2:56:01

Salt 实战:深入理解 salt.wheel.file_roots —— 用 Wheel 模块读写 Master 文件服务器根目录
Salt 实战:深入理解 salt.wheel.file_roots —— 用 Wheel 模块读写 Master 文件服务器根目录

运维配置管理后端 【免费下载链接】salt Software to automate the management and configuration of infrastructure and applications at scale. 项目地址: https://gitcode.com/gh_mirrors/sa/salt 点击查看 免费下载 salt.wheel.file_roots 是 Salt Master 内置… · 2026/9/25 2:55:55

Wan2GP 中的 Seed-VC 实战指南:零样本变声、实时语音转换与歌声转换全流程
Wan2GP 中的 Seed-VC 实战指南:零样本变声、实时语音转换与歌声转换全流程

人工智能AI 应用媒体生成本地部署 【免费下载链接】Wan2GP A fast AI Video Generator for the GPU Poor. Supports Wan 2.1/2.2, LTX-2, Qwen Image, Hunyuan Video, LTX Video and Flux. 项目地址: https://gitcode.com/gh_mirrors/wa/Wan2GP 点击查看 免费下载 … · 2026/9/25 2:55:55

深入解析 BAML compute 基准负载 divide-guard-1m:除零守卫、整数除法与 speedtest 基准框架
深入解析 BAML compute 基准负载 divide-guard-1m:除零守卫、整数除法与 speedtest 基准框架

编程语言AI Agent编译器CLI人工智能 【免费下载链接】baml The programming language for agents 项目地址: https://gitcode.com/gh_mirrors/ba/baml 点击查看 免费下载 导读 divide-guard-1m 是 BAML 开源仓库中 speedtest 基准套件(位于 baml_langu… · 2026/9/25 3:55:37

DiceBear Avataaars 预设(Presets)实战指南:11 套现成配置、代码生成与 Playground 调参
DiceBear Avataaars 预设(Presets)实战指南:11 套现成配置、代码生成与 Playground 调参

UI组件后端 【免费下载链接】dicebear DiceBear is an avatar library for designers and developers. 🌍 项目地址: https://gitcode.com/gh_mirrors/di/dicebear 点击查看 免费下载 DiceBear 官方文档为每个主流样式都准备了「预设(Preset… · 2026/9/25 3:55:37

Apereo CAS Surrogate 认证之 JSON 账户存储配置实战指南
Apereo CAS Surrogate 认证之 JSON 账户存储配置实战指南

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 Surrogate 认证(又称模拟/代管认证,即“Web … · 2026/9/25 3:55:37

pylibcudf 的 ORC 读写 API 完全指南:从 read_orc 到分块写入
pylibcudf 的 ORC 读写 API 完全指南:从 read_orc 到分块写入

数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 本篇技术指南以 cuDF 仓库中 pylibcudf 的 ORC(Optimized Row Columnar)格式 I/O 模块… · 2026/9/25 3:55:37

学生时间管理APP全栈开发实战:课程表、番茄钟与数据闭环设计
学生时间管理APP全栈开发实战:课程表、番茄钟与数据闭环设计

带过三年毕设项目,被问得最多的一个选题就是“学生时间管理APP”。很多同学第一反应是这个题目太老——课程表、待办事项、番茄钟,网上一抓一大把模板,还能做出什么花来?这话只对了一半。时间管理工具确实不稀奇,但面向… · 2026/9/25 3:55:31

Cobalt Strike 4.0 zip解压与部署实战:从伪加密识别到teamserver启动
Cobalt Strike 4.0 zip解压与部署实战:从伪加密识别到teamserver启动

简介:面向网络安全渗透测试与红队演练场景,这是一套 Cobalt Strike 4.0 资源包,适合具备一定基础的安全测试人员、企业蓝队成员及高校安全方向学习者。Cobalt Strike 是由 Raphael Mudge 开发的商业红队平台,4.0 版本在前代基础上… · 2026/9/25 3:55:25

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码