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

重庆做网站建设哪家好网站seo搜索

重庆做网站建设哪家好,网站seo搜索,企业网站建设哪家服务好,番禺建设网站公司概述 苹果在去年 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.zhongyajixie.com/news/20727.html

相关文章:

  • 天津网站建设icp备企业邮箱注册申请
  • 做wish选品参考什么网站最大的中文搜索引擎
  • 企业网站怎么做seo优化定制化网站建设
  • 有ip地址如何做网站信息流优化师是做什么的
  • 公司做网站可以永久买断吗seo搜索引擎是什么意思
  • 在手机上怎么做网站郑州搜索引擎优化
  • 河南网站建设公司 政府线下推广方式有哪些
  • 哈尔滨 建设网站 科技网站怎样才能在百度被搜索到
  • 网站建设技术员百度运营优化师
  • 数字媒体技术移动互联网开发南宁网站优化公司电话
  • 网站做301对优化有影响企业营销推广策划
  • 虎门人才市场招聘信息昆明seo排名
  • wordpress 网站提速企业网站排名优化价格
  • 做课件赚钱网站网页模板图片
  • 聚成网站建设免费技能培训在哪里报名
  • 郑州做网站企业汉狮用今日头条导入自己网站外链
  • 学术网站怎么做潍坊关键词优化平台
  • 怎么自己制作二维码内容手机优化大师下载安装
  • 有什么好的免费网站做教育宣传百度快照怎么用
  • wordpress如何接入visa支付宝苏州seo优化
  • 网站建设的推进方案网络seo推广培训
  • 苹果电脑做网站深圳网页设计
  • 网站集约化平台建设搜索优化网络推广
  • 深圳企业网站设计如何优化关键词
  • 衡阳网站开发有哪些公司网络销售这个工作到底怎么样
  • 家用电脑做网站后台培训心得体会怎么写
  • iis做网站主目录选哪里域名查询网站
  • 净水器十大品牌1688seo优化是什么
  • 常用的网站制作软件网站优化比较好的公司
  • 什么网站可以做相册百度刷排名seo