【免费下载链接】SwiftUI-Agent-Skill
SwiftUI agent skill for Claude Code, Codex, and other AI tools.
SwiftUI-Agent-Skill 是一款面向 Claude Code、Codex、Gemini 等 AI 编程助手的技能包(Agent Skill),其核心技能 SwiftUI Pro 内置了一条关于动画的强规则:强烈推荐使用@Animatable宏,而不是手动创建animatableData。本教程面向新手,用大白话讲清楚这个宏做了什么、如何用一行代码替代手写代码,以及哪些属性不能动画化该怎么处理。
为什么手写 animatableData 容易出错?
在 SwiftUI 中,如果你希望某个属性在动画过程中"平滑过渡"(比如缩放值从 1 变到 2 时的连续变化),需要让视图遵循Animatable协议,并手动实现一个叫animatableData的属性。
这个手写过程有两个典型痛点:
- 样板代码多:要自己声明协议遵循、自己写
animatableData的get/set; - 容易写错:属性类型对不上、忘记协议遵循、多属性时不知道如何合并……AI 助手生成代码时也经常在这里翻车。
这正是 SwiftUI Pro 技能重点针对的"LLM 常犯错误"之一。
一行替代:@Animatable 宏的正确用法
规则原文来自仓库中的 swiftui-pro/references/views.md:
宏会自动添加对
Animatable协议的遵循,并创建正确的animatableData属性。
也就是说,你只需要在结构体前加上@Animatable,协议遵循和animatableData的实现全部由宏自动生成。对比一下:
// 旧写法:手动遵循协议 + 手写 animatableData struct BouncingView: View, Animatable { var scale: Double var animatableData: Double { get { scale } set { scale = newValue } } // ... }// 新写法:一行宏,其余交给编译器 @Animatable struct BouncingView: View { var scale: Double // ... }一行代码,效果相同,却少了大量容易出错的样板代码。这就是"宏替代手写"的核心收益:代码更少、更难写错、AI 生成时也更稳定。
不能动画化的属性怎么办?@AnimatableIgnored
有些属性天生就不适合参与插值动画——比如布尔值、整数。宏在生成animatableData时不知道哪些该跳过,这时就要用@AnimatableIgnored显式标记:
@Animatable struct BadgeView: View { var rotation: Double // 参与动画 @AnimatableIgnored var showLabel: Bool // 布尔值,跳过动画 // ... }规则原话(同样来自 views.md):如果某些属性不应该或无法被动画化(例如布尔值、整数),请标记@AnimatableIgnored。
记住这个组合拳:@Animatable负责"自动生成",@AnimatableIgnored负责"点名排除",两者搭配即可覆盖绝大多数场景。
如何安装并触发 SwiftUI Pro 技能
想让 AI 助手真正遵守这条规则,需要先安装技能:
- 获取仓库(clone 地址:
https://gitcode.com/GitHub_Trending/swi/SwiftUI-Agent-Skill); - 也可通过
npx skills add命令安装(需要 Node 环境),并按提示选择目标 AI 工具及作用范围; - 安装完成后即可触发:
- Claude Code 中输入:
/swiftui-pro - Codex 中输入:
$swiftui-pro - 也可以直接用自然语言,例如:"使用 SwiftUI Pro 技能检查这个项目里的动画问题。"
- Claude Code 中输入:
技能的入口定义在 swiftui-pro/SKILL.md,其中列出了完整的审查流程(废弃 API、视图与动画、数据流、导航、设计、无障碍、性能等),而动画规则正是"视图审查"环节加载的内容。
顺手掌握的 3 条动画规范
@Animatable宏只是开始,swiftui-pro/references/views.md 的 "Animating views" 一节还规定了另外两条同样实用的规则:
| 规范 | 说明 |
|---|---|
| 永远给动画绑定观察值 | 不要用裸的animation(_:),应写成.animation(.bouncy, value: score)的形式 |
| 用 completion 串联动画 | 连续动画必须通过withAnimation() { } completion: { }闭包实现,而不是多个withAnimation加延时 |
这两条规则能有效避免"动画不生效"和"链式动画错乱"两个高频问题。
总结
@Animatable宏 = 一行代码替代手写的Animatable协议遵循与animatableData实现;- 布尔、整数等不可动画属性用
@AnimatableIgnored标记跳过; - 安装 SwiftUI Pro 技能后,AI 助手在写 SwiftUI 动画代码时会自动优先采用这套现代写法。
📁 相关文件清单:
- 技能入口:swiftui-pro/SKILL.md
- 视图与动画规则(本文核心出处):swiftui-pro/references/views.md
- Codex 端配置:swiftui-pro/agents/openai.yaml
- 其他审查维度:references/api.md、references/performance.md、references/accessibility.md
【免费下载链接】SwiftUI-Agent-Skill
SwiftUI agent skill for Claude Code, Codex, and other AI tools.
相关推荐
SwiftUI-Agent-Skill之Swift篇:告别GCD,用async/await写出优雅Swift并发
SwiftUI Agent Skill之Swift篇:告别GCD,用async/await写出优雅Swift并发 🎯 SwiftUI Agent Skill
告别魔法数字:SwiftUI-Agent-Skill之TabView枚举选择绑定教程
告别魔法数字:SwiftUI Agent Skill之TabView枚举选择绑定教程 SwiftUI Agent Skill 是一款面向 Claude Code
Reason宏与元编程:编写生成代码的代码
Reason宏与元编程:编写生成代码的代码 你是否曾遇到需要重复编写相似代码的情况?是否希望用更简洁的方式表达复杂逻辑?Reason的宏与元编程功能正是为解决这
编程语言编译器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考