通过 WWDC 2023,我们了解到 Swift 宏的目标是: 消除重复代码 让繁琐的事情变得简单 以软件包的形式与其他开发者分享 然而,这些目标并不是 Swift 宏所独有的。对于 Swift 中的许多代码重用手段而言,这些都是共同的目标,如函数、类型和模块。可以说,所有高级编程语言都希望实现这些目标。Swift 宏必须在其他方面有所胜出;否则的话没必要存在。 那么, Swift 宏到底擅长什么? 这个问题的答案至关重要。 Swift 宏独一无二的优势会决定它的本质:这可以指导我们创作有效的 Swift 宏、告诉我们在创作宏时的行为边界,并最终帮助我们产出良好设计的 Swift…
在之前的文章中,我们学习了使得 Swift 宏独一无二的优势和本质。文中的示例工作正常,但是我们现在可以放心大胆地实现任何 Swift 宏了吗? 答案是否定的。 给 Swift 宏带来优势的特性也会引入陷阱与缺陷,从而让程序员自己给自己造成麻烦。在本文中,我想向你展示我发现的一些问题以及避免它们的方法。 陷阱与缺陷 控制流的潜在混乱 在之前的文章中的 #unwrap 示例中,Swift 宏展开可能涉及到 控制流操控 和 词法作用域共享 : 展开之前: 展开之后: 由于示例宏展开中涉及控制流的 return…