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

成都优化网站推广网站的基本建设投资

成都优化网站推广,网站的基本建设投资,建设一网站要多少钱,WordPress后台管理主题概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏#xff08;Swift Macro#xff09;。为此#xff0c;苹果特地用 2 段视频#xff08;入门和进阶#xff09;颇为隆重的介绍了它。 那么到底 Swift 宏是什么#xff1f;有什么用… 概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏Swift Macro。为此苹果特地用 2 段视频入门和进阶颇为隆重的介绍了它。 那么到底 Swift 宏是什么有什么用它和 C/C 语言中的宏又有什么异同呢本系列博文将会尝试为小伙伴们揭开 Swift 宏的神秘面纱。 在本篇博文中您将学到如下内容 概述1. 从一个”尴尬“的小例子聊起2. 什么是 Swift 宏它与其它语言中的宏有何不同总结 相信学完本系列博文后Swift Macro 会从大家心中的“阳春白雪”变为“阳阿薤露”小伙伴们必可以将它们运用的“如臂使指”。 那还等什么呢Let‘s go 1. 从一个”尴尬“的小例子聊起 其实早在去年苹果祭出 Swift 5.9 时Swift 语言本身就已经加入了超多先进和现代化的特性。 自从今年 Swift 大版本进化到 6 之后几乎所有秃头码农们都不约而同的认为 Swift 不仅已经前所未有地成熟和稳定而且它的能力也变得史无前例的强大。真可谓“多平台台台出彩多系统统统有戏”貌似 Swift 已经变得“登峰造极”、“气吞山河”了。 果真如此吗 更多关于 Swift 5.9 和 Swift 6.0 语言的全方位介绍请小伙伴们移步我的《Swift 语言开发精讲》专栏和苹果 WWDC 24 官方站点观赏精彩的文章和视频 《Swift 语言开发精讲》  WWDC 2024 咱先别把话说满虽说 Swift 现今已足够强大但它真的是无所不能丝毫不存在所谓的“阿格硫斯之踵”吗 答案是否定的下面我们就举一个小“栗子”让看似强大的 Swift “一秒破功”。 假设我们要实现一个很简单的功能按类型实例的属性排序。 struct Item {let name: Stringlet nickname: String?let age: Intlet power: Double }在上面的 Item 中存在若干属性我们希望写一个通用的排序方法对 Item 集合排序 struct Model {let items: [Item]func sortItemsByValue: Comparable(keyPath: KeyPathItem, Value, sortOrder: SortOrder .forward) throws - [Item] {items.sorted(using: SortDescriptor(keyPath, order: sortOrder))} }如上代码所示我们在模型 Model 中创建了一个 sortItemsBy() 方法按 Item 中任意属性来排序 [Item] 数组。 比如我们可以分别依据 Item 的 name 和 age 属性来生成不同排序后的数组 let model Model(items: []) let itemsByName try! model.sortItemsBy(keyPath: \.name) let itemsByAge try! model.sortItemsBy(keyPath: \.age, sortOrder: .reverse)这样很好很强大不过目前排序功能有点小问题就是我们无法排序类型为可选值的属性 let itmesByNickname try! model.sortItemsBy(keyPath: \.nickname)如您所见当我们试图按 nickname 属性排序 Item 数组时编译器就会大声抱怨。原因前面已经说了因为 nickname 属性的类型是 String?即 OptionalString 对此我们可以提出相应的解决方法即另外写一个可选Optional参数版本的排序方法 func sortItemsByValue: Comparable(keyPath: KeyPathItem, Value?, sortOrder: SortOrder .forward) throws - [Item] {items.sorted(using: SortDescriptor(keyPath, order: sortOrder)) }这个方法与之前的几乎一毛一样唯一不同之处在于 KeyPath 的 Value 是可选类型。 现在我们就有点“哭笑不得”了对于排序功能我们竟然要写两个方法即使它们几乎如出一辙。 当然对于这样简单的排序功能我们完全可以想办法“剥离”外部的方法而直接使用 [Item] 上的 sorted() 方法。 有的小伙伴们可能会想出下面这种“左右逢源”的排序实现 func sortItemByValue: Comparable(keyPath1: KeyPathItem, Value?, keyPath2: KeyPathItem, Value??, sortOrder: SortOrder .forward) throws - [Item] {if let keyPath1 {items.sorted(using: SortDescriptor(keyPath1, order: sortOrder))} else if let keyPath2 {items.sorted(using: SortDescriptor(keyPath2, order: sortOrder))} else {throw MyError(至少要有一个 KeyPath 不为 nil)} }但是这样一来我们仍然在方法内部造成了代码重复并且整体实现根本毫无优雅性可言。 与此类似的场景在偏静态的 Swift 语言中绝对会让我们心余力绌坐如针毡。这就是 Swift 缺乏的能力用代码生成代码 一般来说我们有两种办法来解决此事 在运行时动态生成代码ruby 和 Python 就非常精于此道所以 ruby 和 Python 之类的语言根本不需要所谓的宏由编译器预处理器当家做主在编译前生成代码C/C 宏的强项 将来有没有暂且不说目前 Swift 还没有 ruby 和 Python 那种运行时动态“造码”的能力。不过从 WWDC 23 那年开始苹果推出了 Swift 宏专注于在编译时静态“造码”。 我们的最终目标是实现下面这个 nilable 宏它可以生成对应版本的 KeyPathRoot, Value? 排序方法 看我们如何在这一共 5 篇系列博文中步步为营最后铁杵成针的吧 2. 什么是 Swift 宏它与其它语言中的宏有何不同 在官方的开发文档中苹果就为 Macro 的特性定了基调在编译时生成代码。 具体来说Swift Macro 在编译时可以根据现有代码转换或生成新代码这样做的最大好处就是避免重复DRY Swift 编译器会在我们的逻辑代码编译前将其中的任何宏展开Expands。Swift 宏有两个重要的特性 它绝不会删除已存在的代码它绝不会修改其它已存在的代码 其实在 WWDC 23 之前苹果就已经在代码中使用过海量的特殊宏从最常见的 #function、#file、#error 宏到 main 、available、discardableResult 宏等等。我感觉在 WWDC 23 之前的某个时刻苹果一定就有把这些特殊宏升级为通用宏的壮志凌云。 关于 Swift 宏的详细文档大家可以到苹果官方开发站点一窥究竟  Swift Macros 虽然都是“宏字辈”但是 Swift 中的宏还是与 C/C 等语言中的宏有些区别的 Swift 中的宏完全参与到 Swift 的类型系统中可以在编译时保证类型安全苹果确保宏的展开过程是一个沙箱Sandbox操作不会带来安全漏洞或泄露系统中用户的隐私在宏展开发生错误时Swift Macros 提供了更多的机制来帮助用户快速了解错误原因和解决办法我们可以为宏编写单元测试增强它的鲁棒性 因为 C/C 中的宏只是一个简单的字符串字面值替换器所以无论是用户编写和编译器支持起来都不算太难但是 Swift 的宏就完全是另一回事了。 想要系统学习 Swift 的小伙伴们欢迎来我的 《Swift语言开发精讲》专栏逛一逛哦。 《Swift 语言开发精讲》 在了解了 Swift 宏之后在下一篇博文中我们就来看看它能做些什么以及不要用它们做什么 总结 在本篇博文中我们讨论了 Swift 宏的基本概念以及它与 C/C 语言中的宏有何不同。 感谢观赏我们下一篇见
http://www.w-s-a.com/news/552055/

相关文章:

  • 软件开发设计制作网站下载自己怎么做视频收费网站
  • 江苏省建设安全协会网站天津网站建设哪家公司好
  • 资源类网站怎么做的网站上线准备工作
  • 长沙专业网站建设怎么做企业建站公司服务
  • 肇庆市有限公司网站建设手机直接看的网站有哪些
  • 织梦修改网站后备份英语作文模板高中
  • 个人网站域名用什么好上海公司拍沪牌需要什么条件
  • 网站建设 保密做网站赚钱交税
  • 食品建设网站前的市场分析进出口网站贸易平台有哪些
  • php商城网站建设个人网站用什么服务器
  • 如何做好品牌网站建设方案网站开发的学习
  • 网站开发 管理方案wordpress怎么搭建微博
  • 有哪些ui的设计网站网上商城网站建设设计方案
  • iis中怎样配置网站绑定运城可以做网站的公司
  • 品牌网站建设开发价格dedecms电影网站模板
  • 网站设计外包合同帝国网站后台认证码错误
  • 网站设计公司深圳怎么免费做公司网站
  • 90设计网站几次是什么意思swipe类网站
  • 安康微网站建设网站域名使用费用
  • 网站建设执招标评分表微信代理网站模板
  • ps做网站分辨率自适应地方网站盈利
  • 免费自助小型网站专业网站建设组织
  • 猎聘网网站建设目标查看别人wordpress主题
  • 免费建设网站入驻网站备案不能更新吗
  • 个人网站制作代码西安建筑类公司
  • 网站备案要营业执照吗网站建设如何记账
  • 新手学做网站难吗外包服务商
  • 公司网站建设的项目工作分解结构wordpress插件后端页面
  • 四川省建设人才网站2018南京专业建站
  • ppt制作网站推荐seo教程百度网盘