当前位置: 首页 > news >正文

重庆做网站建设哪家好新十条优化措施

重庆做网站建设哪家好,新十条优化措施,公司网站建设哪家公司好,爱心互助网站开发概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏(Swift Macro)。为此,苹果特地用 2 段视频(入门和进阶)颇为隆重的介绍了它。 那么到底 Swift 宏是什么?有什么用&…

在这里插入图片描述

概述

苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏(Swift Macro)。为此,苹果特地用 2 段视频(入门和进阶)颇为隆重的介绍了它。

在这里插入图片描述

那么到底 Swift 宏是什么?有什么用?它和 C/C++ 语言中的宏又有什么异同呢?本系列博文将会尝试为小伙伴们揭开 Swift 宏的神秘面纱。

在本篇博文中,您将学到如下内容:

  • 概述
  • 3. Swift 宏的种类和应用场景
    • 3.1 独立宏(Freestanding macros)
    • 3.2 附属宏(Attached macros)
    • 3.3 适用场景
  • 总结

相信学完本系列博文后,Swift Macro 会从大家心中的“阳春白雪”变为“阳阿薤露”,小伙伴们必可以将它们运用的“如臂使指”。

那还等什么呢?Let‘s go!!!😉


3. Swift 宏的种类和应用场景

为了细粒度和规范化 Swift 宏的使用场景,苹果将其分为两大类,7 小类,它们分别是:

  • Freestanding macros(独立宏)
    • expression
    • declaration
  • Attached macros(附属宏)
    • peer
    • accessor
    • memberAttribute
    • member
    • conformance

在 WWDC 23 视频中苹果也将这些宏类型称之为宏角色(macor roles):
在这里插入图片描述

简单来说,独立宏(Freestanding macros)自身会单独出现,并不附在声明(declaration)上;而附属宏(Attached macros)会改变它所附属的声明。

3.1 独立宏(Freestanding macros)

对于独立宏,我们可以用苹果默认宏模版例子中的 stringify 宏来诠释一下它:

@freestanding(expression)
public macro stringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "MyMacroMacros", type: "StringifyMacro")

如上所示 stringify 即为一个独立宏,它的作用是根据输入内容生成新的表达式(expression)。我们可以这样使用它:

let a = 17
let b = 25let (result, code) = #stringify(a + b)print("The value \(result) was produced by the code \"\(code)\"")

如下图所示,我们实际将加法表达式转换为了一个元组表达式,我们还可以随时展开源代码中的宏来检查结果是否符合预期:

在这里插入图片描述

3.2 附属宏(Attached macros)

相对于独立宏,附属宏更像依赖于现有内容的“精灵”,它会根据所附属声明的内容生成相关联的新代码。比如,它可以为现有类型新增构造器、方法和属性。

举一个苹果官方的“栗子”,假设我们需要自动生成类似下面的 OptionSet 类型:

struct SundaeToppings: OptionSet {let rawValue: Intstatic let nuts = SundaeToppings(rawValue: 1 << 0)static let cherry = SundaeToppings(rawValue: 1 << 1)static let fudge = SundaeToppings(rawValue: 1 << 2)
}

我们可以创建一个如下的 OptionSet<RawType> 宏:

@attached(member)
@attached(extension, conformances: OptionSet)
public macro OptionSet<RawType>() =#externalMacro(module: "SwiftMacros", type: "OptionSetMacro")

有了它,我们就可以轻松的让任意类型变成符合条件的 OptionSet 啦:

@OptionSet<Int>
struct SundaeToppings {private enum Options: Int {case nutscase cherrycase fudge}
}

@OptionSet 会为上面的 SundaeToppings 结构自动生成所需的代码从而满足功能需求:

struct SundaeToppings {private enum Options: Int {case nutscase cherrycase fudge}// 下面的代码都是宏自动生成的typealias RawValue = Intvar rawValue: RawValueinit() { self.rawValue = 0 }init(rawValue: RawValue) { self.rawValue = rawValue }static let nuts: Self = Self(rawValue: 1 << Options.nuts.rawValue)static let cherry: Self = Self(rawValue: 1 << Options.cherry.rawValue)static let fudge: Self = Self(rawValue: 1 << Options.fudge.rawValue)
}
// 同样是宏生成的代码
extension SundaeToppings: OptionSet { }

由此可见,作为附属宏的 @OptionSet 附着在 SundaeToppings 结构上,并让它“脱胎换骨”。


由于篇幅有限,这里仅介绍 Swift 宏两种大类型的使用情况,至于每种小类型(Freestanding macros 中的 peer 小类型会在后面详述)的详细介绍请小伙伴们参考官方文档、github 示例以及我后续的博文。


3.3 适用场景

从上面的介绍可知,Swift Macros 是一种编译器在编译时生成代码的静态工具。这意味着,我们最好用它来做与现有代码相关的事而不是“天马行空”般脑洞大开的反其道而行之。

它操作的应该是编译时能确定的内容,比如方法名或可能出现的警告:

func myFunction() {print("Currently running \(#function)")#warning("Something's wrong")
}

不要(也不应该)在宏扩展时根据外部动态内容生成代码,比如:从网络(别忘了沙盒限制)实时下载数据、或是返回当前的时间(Date.now)等。

在了解了 Swift 宏的种类和适用场景之后,我们将在下一篇博文中来聊聊 Swift 宏代码的组织结构,敬请期待吧。

总结

在本篇博文中,我们介绍了 Swift 宏的种类(2大类,7小类)和实际编码中应该遵循的适用准则。

感谢观赏,下篇再会!😎

http://www.hrbkazy.com/news/48518.html

相关文章:

  • 现在怎么建设一个网站网店推广有哪些方法
  • 政府网站什么时候建设的短视频培训学校
  • 网站怎样做淘宝客郑州网站推广公司咨询
  • 凡科建站网站怎么保存发给别人短视频营销常用平台有
  • 有网站如何做淘宝客怎么建网站卖东西
  • 河南建设网站公司最有效的网络推广方式
  • 绵阳建网站哪家好网站提交收录软件
  • 南山企业网站建设清远网站seo
  • 做网站是不是需要服务器网站搜索引擎
  • 中国采购网官网入口东莞网站推广行者seo08
  • 佛山网站推广seo商业推广费用一般多少
  • 偷拍做自拍视频网站考拉seo
  • 自己做新闻网站抖音推广平台联系方式
  • 外贸型网站建设的基本流程企业策划方案怎么做
  • 如何用wordpress建一个网站游戏代理平台
  • 安陆做网站公司电商运营入门基础知识
  • 开元棋牌网站怎么做泉州百度竞价开户
  • 的网站制作seo常用工具
  • 怎么制作图片和文字一起优化网站排名方法教程
  • 许昌做网站公司报价开发一个网站
  • 什么网站上做任务赚钱免费seo网站的工具
  • 网站推荐靠谱的能长久看的seo优化排名软件
  • asp动态网站开发总结北京seo公司华网白帽
  • 网站支付链接怎么做济南网站优化排名
  • 济南集团网站建设seo千享科技
  • 中华建设杂志社网站南京网站制作
  • 公司网站如何做二维码seo查询网站是什么
  • 淘客怎么做网站单页想做seo哪里有培训的
  • 广州网站改版设计公司上海网站设计公司
  • 有什么类似凡科建站疫情最新情况