在这里插入图片描述

在这里插入图片描述

前言

本期是 Swift 编辑组自主整理周报的第五十五期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。

Swift 周报在 GitHub 开源,欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。

成功的路上并不拥挤,因为坚持下来的人并不多。Swift社区也许并不耀眼,但会始终亮在你心!

周报精选

新闻和社区:三大指数涨跌不一,苹果重新夺回美股第二大上市公司宝座

提案:Metatype 关键路径提案正在审查

Swift 论坛:讨论写入时有条件复制/克隆

推荐博文:Swift 中的 if 和 switch 表达式

话题讨论:

你认为全国统一高考试卷有必要吗?

上期话题结果

通过投票结果可以看出,观众对不同类型音乐的偏好反映了多样化的音乐需求。音乐没有国界,不同类型的音乐在传递情感、引起共鸣方面各有千秋,这也是音乐的迷人之处。

新闻和社区

苹果公司据悉将推出密码管理应用

2024 年 6 月 7 日

6 月 7 日消息,知情人士称,苹果公司将于下周推出一款名为“密码”(Passwords)的自制新应用,旨在方便用户登录网站和软件。知情人士表示,苹果公司正计划将这款新应用作为 iOS 18、iPadOS 18 和 macOS 15(iPhone、iPad 和 Mac 操作系统的下一个重要版本)的一部分。这款软件可以生成密码并跟踪密码,将于 6 月 10 日在苹果全球开发者大会上发布。新应用由钥匙串(iCloud Keychain)提供支持,这是苹果公司存在已久的一项服务,可以在不同设备之间同步密码和账户信息。这项功能以前隐藏在公司的设置应用中,或在用户登录网站时显示。(来源:界面新闻)

三大指数涨跌不一,苹果重新夺回美股第二大上市公司宝座

2024 年 6 月 7 日

  • 美国首次申请失业救济人数环比增加 8000 至 22.9 万
  • 英伟达回吐涨幅收跌 1%
  • 金价创两周新高

当地时间 6月 7 日(周四), 美股三大指数收盘涨跌不一,其中纳斯达克和标普 500 指数均在周三创出新高后回落,在周五关键就业数据公布前,市场仍持谨慎态度。另一方面,稍早公布的初请失业金人数略高于预期,是美国就业市场呈现降温趋势的最新迹象,加强了市场对美联储将在今年晚些时候降息的预期。

截至当天收盘,道琼斯工业平均指数上涨 78.8 点,涨幅为 0.20%,报 38886.17 点;纳斯达克综合指数下跌 14.78 点,跌幅为 0.09%,报 17173.12 点;标准普尔 500 指数下跌 1.07 点,跌幅为 0.02%,报5352.96 点。纳斯达克与标普 500 指数在盘初分别最高涨至 17235.73 点和 5362.35 点,均创盘中历史新高。

行业板块方面,标普 500 指数十一大板块中,非必需消费品板块和能源板块分别以 0.97% 和 0.55% 的涨幅领涨,公用事业板块和工业板块分别以 1.03% 和 0.60% 的跌幅领跌。

个股方面,英伟达回吐日内高达 2% 的涨幅,收跌 1%,市值跌破 3 万亿美元。当天,苹果股价收跌 0.71%,市值亦从 3 万亿美元上方回落,但超过英伟达,重新夺回美国第二大上市公司的位置。

上周末,英伟达首席执行官黄仁勋宣布计划将在 2025 年推出 Blackwell Ultra 芯片,并在 2026 年推出下一代 Rubin 平台,受这些消息的影响,近几个交易日英伟达屡次创下收盘新高。

花旗集团美国股票交易策略主管凯泽(Stuart Kaiser)表示:“英伟达的优势在于,他们是极少数能够真正获得AI收入的公司之一。股价越高,说明获得营收的潜力越大,当然风险也会增加。但到目前为止,一切看起来都很好。”

游戏驿站收涨 47.45%,此前 2021 年“散户大战华尔街”事件的发起者——“咆哮小猫”(Roaring Kitty)的账号称将在社交平台上进行直播。
露露乐蒙(Lululemon)涨 4.79%,公司第一季度利润和销售额均超过预期,同时还上调了年度业绩指引,得益于中国市场强劲增长。

蔚来汽车跌 6.83%,公司第一季度业绩不及预期,净亏损为 51.85 亿元,同比扩大 9.4%。
美国劳工部 6 日公布的数据显示,截至 6 月 1 日一周,美国首次申请失业救济人数环比增加 8000 至 22.9 万,升至四周以来最高值。

数据显示,上周波动较小的首次申请失业救济人数四周移动平均值环比减少 750 至 22.225 万。同时,截至 5 月 25 日一周,美国全国申请失业救济人数为 179.2 万,环比增加 2000。反映投保人员中正接受失业救济人数占比的投保失业率环比持平在 1.2%。

分析人士认为,美国首次申请失业救济人数升至高点,可能部分由于毕业季大量毕业生进入劳动力市场所致。展望未来,有经济学家认为失业者仍能够“相对容易地”找到新工作,美国劳动力市场紧张状况仍未实质性改善。

杰富瑞经济学家西蒙斯(Thomas Simons)表示:“从任何历史标准来看,续领失业金人数仍然很低,我们仍然认为数据支持这样一种观点,即失业者能够相对容易地找到新工作。”

稍早前,就业咨询公司挑战者(Challenger, Gray & Christmas)的数据显示,5 月美国雇主宣布的裁员人数为 12 月以来最少,2024 年迄今宣布的裁员人数低于去年同期。

5 月雇主宣布裁员 63816 人,比 4 月 64789 人减少 1.5%,比去年同期的 80089 人减少约 20%。年初至今宣布的裁员人数比 2023 年同期减少 7.6%。

此外,美国 4 月份贸易逆差扩大。美国商务部经济分析局周四公布数据显示,4 月贸易逆差增加 8.7%,至 746 亿美元。3 月数据修正后小幅收窄至 686 亿美元。4 月份进口增长 2.4%,至 3382 亿美元。商品进口增加 81 亿美元,至 2719 亿美元。汽车和零部件、电脑配件和电信设备等资本货物,以及包括原油在内的工业用品和原材料的进口均有所增加。出口小幅增长 0.8%,至 2636 亿美元。商品出口增加 22 亿美元,至1727 亿美元。资本品和消费品出口增加,而工业用品和材料出口下降。服务出口下降 2 亿美元至 1727 亿美元。

大宗商品市场方面,由于市场对美联储的降息押注增加,金价创两周新高,COMEX 黄金期货 8 月合约涨 15.4 美元,涨幅 0.65%,报 2390.9 美元/盎司。(来源:第一财经)

苹果iOS 18新动向:AI功能强化隐私保护,用户自主选择启用

2024 年 6 月 6 日

6月6日消息,据彭博社最新报道,苹果公司计划在其即将推出的iOS 18操作系统中,对AI功能进行重要更新,这些更新不仅将更加注重用户的隐私安全,而且将实现用户自主决定是否启用这些功能。

据了解,iOS 18中的AI功能将在设计上充分考虑用户的隐私需求,确保在数据收集、处理和共享过程中,用户的个人信息得到最大程度的保护。苹果公司强调,他们将继续坚守“用户至上”的原则,不会在未经用户明确同意的情况下收集或利用任何个人信息。

值得一提的是,用户可以根据自己的需求和偏好,选择是否启用特定的AI功能。业内专家表示,苹果公司在iOS 18中强化隐私保护和用户选择权的做法,将进一步提升其品牌形象和用户忠诚度。同时,这也是科技企业重视用户隐私和数据保护的体现。(来源: 央广网 )

提案

通过的提案

SE-0437 不可复制的标准库原语 提案通过审查。该提案已在 第五十四期周报 正在审查的提案模块做了详细介绍。

正在审查的提案

SE-0438 Metatype 关键路径 提案正在审查。

关键路径表达式动态访问属性。它们使用具体的根类型和一个或多个关键路径组件进行声明,这些组件通过类型的属性、下标、可选链表达式、强制解包表达式或自我定义结果值的路径。该提案扩展了关键路径表达式访问,以包括类型的静态属性,即Metatype 关键路径。

Swift论坛

  1. 提议SwiftOS,一项提案

内容概括

该帖子提出了创建一个名为 “SwiftOS” 的开源操作系统的想法,该系统完全用 Swift 构建,灵感来自 Apple 的 XNU 内核和 Darwin OS 项目。该提议背后的主要动机是为希望开发新设备但具有 Apple 技术(如 Swift 的自动引用计数 (ARC))提供的更好性能和内存管理功能的独立设备制造商提供 Android 的替代方案。

设想中的 SwiftOS 将设计为在 ARM 和 RISC-V 架构上运行,支持各种设备,如微控制器、服务器、智能手机、平板电脑、XR 耳机等。它将采用 SwiftUI、WebAssembly 和本地 AI/LLM 处理等现代技术。目标是创建一个通用标准层,允许开发人员使用 SwiftUI 为 Apple 设备构建应用程序,并让它们在 SwiftOS 驱动的设备上无缝运行。

该提案表明,SwiftOS 可能成为下一代 NEXTstep OS,并可能被 Apple 自身采用用于其商业产品,同时仍允许在其设备上使用专有代码和服务。它应该强制执行最新的 Swift 并发要求并支持 Swift Charts 和 Swift Data 等技术。

该帖子承认创建这样一个操作系统可能涉及技术和业务挑战,但表达了希望世界运行在 Darwin、Swift 和 SwiftUI 而不是 Linux、Dart/Flutter 和 JavaScript/React 上的愿望。

该帖子还包括其他开发人员对构建操作系统所面临的挑战和机遇的看法,例如将 Swift 推向极限、管理中断和中断安全、自定义分配器支持以及重新考虑现有操作系统(如 XNU 和 BSD)的设计决策。还提供了有关操作系统开发的各种资源的参考。

  1. 讨论超出 SE-0301 的包清单编辑命令

内容概括

讨论了在 Swift Package Manager 中引入其他命令来编辑软件包清单的想法,这些命令除了已接受的提案 SE-0301 中指定的三个命令(add-product、add-target、add-dependency)之外。作者已经实现了这三个命令,还提出了一个新命令“add-target-dependency”,用于向特定目标添加依赖项。

随着软件包清单编辑命令的数量不断增加,本文提出了一个问题:是否应继续将这些命令添加为 “swift package” 的子命令,或者是否应考虑采用不同的分组方法。建议两种可能的分组:

  1. swift package manifest <command>” - 所有清单编辑命令都将分组在 “manifest” 子命令下。

  2. swift package product <command>” 和 “swift package target <command>” - 分离产品相关命令和目标相关命令,其中一些命令可能涉及清单编辑。

然后,作者邀请大家就如何最好地组织这些命令提出想法和意见。

另一位开发人员回应道,分享了他们对交互式和批处理场景中命令行参数使用的看法。他们认为,命令中的深层层次结构会使发现和使用更加困难,尤其是在具有自动完成或帮助功能的交互式场景中。建议保留现有的两级层次结构(swift > package),以提高可发现性和易用性。

  1. 讨论不可复制类型和隐式转换

内容概括

讨论了 Swift 中的隐式类型转换问题以及它们如何与不可复制类型交互,尤其是在引入不可复制泛型之后。它提供了一个示例,其中从不可复制类型 FooFoo?any Fooable & ~Copyable 的隐式转换会导致消费操作,从而导致错误,因为该值被消费了不止一次。

作者承认这种行为可能会让大多数人感到困惑,因为他们可能认为 test 函数中借用的参数是消费操作的来源,而实际上是调用者 conversions 执行了隐式转换,导致了消费。

为了解决这种困惑,作者提出了两个想法:

  1. 在执行隐式转换时发出警告,可以通过编写 consume foo 来消除警告。仅在转换发生在变量上的情况下才需要此警告,而不适用于 return footest(Foo()) 等情况,因为这些情况显然是最后一次使用或不转换变量。

  2. 使隐式转换显式化,要求用户显式编写转换,例如 test(foo as Foo?)test(.some(foo))

另一位开发人员在帖子中发表评论,认为其中一些转换可能通过某种技巧借用,因为无法从不可复制类型借用到可选或超类是一种损失。他们还提到,要求 consume 对于当前时期是合理的,而这些转换实际上会执行消费,但他们没有预料到需要更改函数签名设计以适应这种行为的存在和缺失。

  1. 讨论写入时有条件复制/克隆

内容概括

在 Swift 中实现持久二叉树数据结构,以及当有多个引用节点时有条件地复制或克隆节点(写时复制语义)的挑战。作者正在寻找最佳实践或方法来匹配 Swift 中 Rust 的 Rc::make_mut 的行为。

作者为二叉树提供了一个简化的 Node 类实现,并解释了 insert 函数的问题,如果只有一个引用节点,则应该就地改变节点,或者如果有多个引用,则创建一个副本并改变副本。

作者探讨了一些潜在的解决方案:

  1. 使用像 Swift-CowBox 这样的库来实现写时复制语义,但提到它可能会影响性能。
  2. 利用 __shared__owned 关键字,但不确定它们是否提供了正确的解决方案。
  3. 使用修改访问器来控制可变性。
  4. 将节点表示为递归枚举而不是可选项,但担心性能影响。

然后作者提出了 Swift 中安全持久树的当前最佳实践以及如何匹配 Rust 的 Rc::make_mut 行为的问题。

另一位开发人员回应了以下几点:

  1. 将节点表示为值类型(结构或枚举)对于 Swift 中的一般情况可能效率较低,但不可复制的泛型可能会改善这种情况。
  2. 澄清 Swift 中的类(引用类型)可以变异,无论声明为 var 还是传递为 inoutinout 参数仅与值类型(结构、枚举和非类协议)相关。
  3. 建议在 Swift 中与 Rust 的 Rc::make_mut 最接近的函数可能是 Foundation 框架中的 CFGetRetainCount 函数,该函数在 Apple 平台上可用,并且可能通过 swift-corelibs-foundation 项目在 Linux/Windows 上可用。当保留计数大于 1 时,此函数可用于复制条件复制行为。

总之,该帖子寻求在 Swift 中为持久二叉树数据结构实现写时复制语义的指导,并且开发人员提供了有关潜在解决方案的见解,包括使用 CFGetRetainCount 函数和阐明引用类型的 inout 参数的行为。

  1. 讨论代码生成:Swift 语法还是 Mustache?

内容概括

讨论了 Swift 语法和 Mustache 之间的区别,以及它们各自的代码生成用例。

Swift 语法是 Swift 语言语法的具体实现,用于低级代码操作和支持 Swift 宏。它适用于生成样板代码,例如单元测试样板、请求/响应 DTO 以及与特定用例相关的其他样板代码。

另一方面,Mustache 是一种用于渲染模板的模板语言,通常用于服务器端 HTML 渲染。它不依赖于特定的编程语言,可以在 JavaScript、Ruby 等各种语言中找到。

本文建议,对于生成样板代码,宏或 Sourcery 等工具是首选方法。宏的编写可能很复杂,因此如果需要属于常见情况,建议首先寻找现有的解决方案。

一位开发人员分享了他们在公司广泛使用 swift-syntax 为 AWS Lambda 函数生成样板代码的经验。他们发现,使用 SyntaxBuilders 时,swift-syntax 功能强大、可组合、可重用且易于阅读。他们提供了一个最小的代码片段,演示了如何使用 swift-syntax 生成 Decodable 结构。

提到的 swift-syntax 的另一个优点是它与 swift-parser 和 swift-format 集成,允许在同一步骤中高效地评估文件更改并进行格式化。

此外,swift-syntax 支持对现有源代码文件进行操作,从而可以在 Package.swift 文件中手动管理非自动生成的目标,而不是依赖于 gyb 等模板工具。

总体而言,这篇文章重点介绍了 Swift Syntax(低级代码操作和生成)和 Mustache(模板)的不同用途,并提倡使用 swift-syntax 生成样板代码,尤其是在处理复杂或特定用例时。

推荐博文

Swift 中的 if 和 switch 表达式

摘要: 本文介绍了 Swift 5.9 中引入的 if 和 switch 表达式,以及它们在实际代码中的应用。通过一个健康指标计算的实例,阐述了使用 if 和 switch 表达式的好处,提高了代码的可读性和维护性。新特性允许在表达式中直接初始化常量,避免了定义后再赋值的繁琐过程。

文章还强调了使用 if 和 switch 表达式时的一些注意事项,包括每个分支必须是单个表达式、支持模式匹配和 where 子句等。最后,介绍了如何在表达式中使用 if 语句,展示了与三元操作符相比的优势,并提供了实际的代码示例。

289M → 259M 得物包体积治理实践

摘要: 文文章总结了得物应用在包体积治理方面的实践经验。介绍了包体积大小对应用性能的重要性,以及过大包体积可能带来的问题。并详细解释了在包体积治理中采取的新思路和实践方法,包括 Macho 产物测试、LinkMap 分析、Mach-o 代码内容分析等。接着描述了落地实践过程,包括 Cocoapods 改造、Native 代码整改以及组件发版流程重构等方面的工作。最后总结了整个治理过程带来的收益,得物应用的包大小从 289.3M 降低至 259.3M。

如何轻量级的来定义 Swift JSON Model

摘要: 这篇 Swift 博客详细探讨了在处理 JSON 数据时的常见挑战和解决方案。介绍了 Codable 协议的优势和局限性,指出了其中不支持类型转换和默认值设置的问题。然后提出了自定义解码器和编码器的方案,以应对这些问题,实现了类型转换和默认值设置的需求。通过多个示例代码展示了如何使用自定义解码器和编码器来优雅地处理 JSON 数据,包括处理类型不一致、设置默认值、处理嵌套模型等情况。

文章的最后作者提出了利用 Swift 特性和自定义解码器、编码器的优势,能够更好地应对复杂的 JSON 数据处理需求。

话题讨论

又到了一年一度的高考日,今年全国高考人数高达1300万。各地参加高考的人数极不均衡。河南、山东、河北参加高考的人数最多,但这三大省的高校相对较少,高考竞争也最激烈。而北京、上海参加高考人数只有几万,高校却相对较多,如此看来,北京、上海高考考上大学比河南、山东、河北容易的得多。

你认为全国统一高考试卷有必要吗?

  1. 有必要,统一教育标准
  2. 没必要,各地区有差异
  3. 不好说,实施有困难

欢迎在文末留言参与讨论。

关于我们

Swift社区是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 Swift实战SwiftUlSwift基础为核心的技术内容,也整理收集优秀的学习资料。

特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部