宏角色:独立宏与附加宏
了解 #expression 宏,以及 @attached peer/member/accessor 宏角色。
宏角色:独立宏与附加宏 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
什么是 Swift 宏
Swift 宏会在编译时展开源代码,自动生成样板代码,而且不会产生运行时开销。
// Macros are invoked with # (freestanding) or @ (attached)
#warning("Fix this later")
@Observable class Counter { var count = 0 }独立表达式宏
独立表达式宏以#开头,可以生成一个值或执行副作用。
// #stringify expands to a tuple of the value and its source string
let (val, src) = #stringify(1 + 2)
print(val, src) // 3, "1 + 2"独立声明宏
独立声明宏会在使用位置生成新的声明,例如函数和变量。
// #makePair emits two variables
#makePair("point", x: 1, y: 2)
// expands to: let pointX = 1; let pointY = 2附加成员宏
附加的@member宏可以为其所附加的类型添加新的存储属性、计算属性、初始化器或方法。
@AddID
struct User { var name: String }
// Expands to: var id = UUID()附加访问器宏
附加的@accessor宏会为存储属性生成获取器和设置器实现。
struct Point {
@Clamped(0...100)
var x: Int = 0
// accessor macro generates get/set with clamping
}附加同级宏
同级宏会在其所附加的声明旁边添加同级声明。
class Service {
@AddAsync
func fetchSync(completion: @escaping (Data)->Void) { ... }
// peer macro adds: func fetch() async -> Data
}附加一致性宏
一致性宏会为类型添加协议遵循及其所需的实现。
@EquatableByID
struct Product { var id: Int; var name: String }
// adds: extension Product: Equatable { ... }附加扩展宏
扩展宏会为类型生成完整的扩展代码块,适合用于添加复杂的协议实现。
@CustomCodable
struct Config { var host: String; var port: Int }
// adds: extension Config: Codable { custom encode/decode }宏展开发生在编译时
所有宏展开都发生在编译期间,不会产生运行时开销,并且展开后的代码可以在 Xcode 中查看。
// Right-click macro usage in Xcode → "Expand Macro"
// to see the generated source code声明宏
宏应在单独的宏目标中使用@freestanding或@attached属性进行声明。
@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String)
= #externalMacro(module: "MyMacros", type: "StringifyMacro")宏角色概览
独立宏:#expression、#declaration。附加宏:@member、@accessor、@peer、@conformance、@extension。
// Freestanding
let result = #stringify(40 + 2)
// Attached
@Observable class Model { var count = 0 }快速检查
哪个宏角色可以为其修饰的类型添加新成员,例如属性或初始化器?
课程回顾
独立宏(#name)可以生成值或声明。附加宏(@name)可以为类型添加成员、访问器、同级声明、协议遵循或扩展。所有展开都发生在编译时。
用 AI 导师学习 Swift — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 122
- 课程
- 409
常见问题解答
「宏角色:独立宏与附加宏」课时是免费的吗?
是的 — 「宏角色:独立宏与附加宏」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「宏角色:独立宏与附加宏」这节课中我会学到什么?
了解 #expression 宏,以及 @attached peer/member/accessor 宏角色。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「宏角色:独立宏与附加宏」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 宏角色:独立宏与附加宏
- 编写独立表达式宏
- 用于减少样板代码的附加成员宏
- 测试与调试宏