前言

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

欢迎投稿或引荐内容。现在方案每两周周一发布,欢迎情投意合的朋友一同加入周报收拾。

一个人真正醒悟的时候,就会去寻觅心里世界真正的财富。Swift社区巴望走进你的心里,与你一同拥抱财富!

周报精选

新闻和社区:苹果高管确认,新品行将上市

提案:环绕 Macros 提出多个提案

Swift 论坛:新发布 VSCode devContainers 的新功用

引荐博文:运用 async/await 完成后台使命办理

论题评论:

程序员摄生喝什么?

新闻和社区

苹果高管确认,新品行将上市

众所周知,苹果对待还未正式发布的产品,历来采纳较为严格的保密政策。 不过,在上一年 3 月举办的苹果春季发布会上,苹果对新品的一波预告,似乎成了近些年来罕有的例外。

Swift 周报 第二十四期

苹果硬件工程高级副总裁 John Ternus 在发布会结尾,暗示了行即将推出新款 Mac Pro 的消息。

实践上这也并不稀罕,苹果早在 2020 年就曾宣告了一项「两年方案」,预计在两年时刻内将旗下一切 Mac 产品都转向自研芯片,完全抛弃英特尔。

而如今两年之期已到,Mac 产品线中,也仅剩 Mac Pro 一款产品还未搭载 M 系芯片。

就在许多期待这款新 Mac 的小伙伴望穿秋水之际,另一位苹果高管为咱们带来了与之相关的最新消息。

近期,苹果全球产品营销副总裁 Bob Borchers 接受了 India Today 的采访,并针对一些产品问题进行了回复。

Swift 周报 第二十四期

Bob Borchers 表示,在将大部分 Mac 产品都搭载 M 系芯片后,现阶段苹果的「两年方案」还在进行中。

也就是说,苹果的终极方针是将 Mac 产品线完满足系自研后,将自研芯片扩展至一切苹果产品中,其间自然也包含新款 Mac Pro。

从这两年的苹果的一系列动作来看,推进 Mac 全面自研化的进程现已接近收官,现在只差 Mac Pro。

对等组基准方针现已在“App 剖析”中发布

App Store Connect 中的“App 剖析”是一款有用的东西,它具备丰厚的功用,可协助你了解和改进你的 App 在 App Store 中的表现。借助与获客率、运用和盈余战略相关的方针,你能够经过“App 剖析”监控客户生命周期 (从认知到转化再到留存) 中各个阶段的结果。对等组基准方针会将你 App 的表现与 App Store 中相似的 App 进行比较,从今天开端,你能够运用此功用在有效情境中衡量 App 的表现。现在,你将获得更多见解,更有效地发现业务增加时机。

对等组基准方针会在整个客户旅程中供给独到且有用的新见解,协助你更准确地了解 App 在哪些方面表现出色,并找到改进的方向。体系会依据 App 的 App Store 类别、商业模式和下载量将 App 归入不同的对等组中,以保证比较数据的相关性。此外,对等组基准方针运用行业抢先的差分隐私技能,供给相关且切实可行的见解,一同保证单个 App 表现的私密性。

检查新的基准方针数据,然后运用 App Store Connect 中的其他东西来改善转化率、收益、溃散率和用户留存率。你能够测验产品页上的不同元素以找出最能引起用户共识的部分,创建出额定的产品页版本以要点推介特定功用或内容,获得有关 Beta 版 App 的反应,供给 App 内活动以鼓舞参与,等等。

提案

正在检查的提案

SE-0382 Expression Macros 提案从头康复检查。该提案已在 二十期周报 正在检查的提案模块做了具体介绍。

SE-0388 增加 Async[Throwing]Stream.makeStream 办法 提案正在检查。

改天主张引进辅助办法来创建 AsyncStreamAsyncThrowingStream 实例,使开发者运用起来愈加方便。

SE-0389 Attached Macros 提案正在检查。

Attached Macros 是 Swift 中 Macros 愿景的一部分,该提案以 SE-0382 Expression Macros 的思想和动机为根底,涵盖了很多新的用例,将参考该提案以了解 Macros 怎么集成到语言中的根本模型。

SE-0390 **引进 @noncopyable ** 提案正在检查。

该提案引进了 @noncopyable 类型(也称为 move-only 类型)的概念。 @noncopyable 类型的实例始终具有仅有一切权,这与能够自在复制的一般 Swift 类型不同。

SE-0391 Package Registry 揭露发布 提案正在检查。

Package Registry 揭露发布后,能够对外揭露可用。 从 Swift 5.7 开端,SwiftPM 支撑运用任何完成与 SE-0292 一同提出的服务规范的注册表的依靠项解析和包下载。

Swift论坛

  1. 提议包办理器支撑自界说宏 介绍 宏供给了一种经过对输入源代码履行恣意句法转换来生成新代码来扩展 Swift 的办法。 一个比如是之前在SE-0382 中提出的表达式宏。该提案涵盖了怎么界说、构建和分发自界说宏作为 Swift 包的一部分。 动机 SE-0382 和 A Possible Vision for Macros in Swift 涵盖了宏自身的动机,将它们界说为包的一部分将供给一种直接的方式来重用和分发宏作为源代码。 提议的解决方案 在外部程序中完成的宏能够经过新的宏方针类型声明为包的一部分,界说在 CompilerPluginSupport 库:
public extension Target {
    /// Creates a macro target.
    ///
    /// - Parameters:
    ///     - name: The name of the macro.
    ///     - dependencies: The macro's dependencies.
    ///     - path: The path of the macro, relative to the package root.
    ///     - exclude: The paths to source and resource files you want to exclude from the macro.
    ///     - sources: The source files in the macro.
    static func macro(
        name: String,
        dependencies: [Dependency] = [],
        path: String? = nil,
        exclude: [String] = [],
        sources: [String]? = nil
    ) -> Target {
}

相似于包插件(SE-0303“包办理器可扩展构建东西”),宏插件被构建为主机的可履行文件(即,运转编译器的当地)。 编译器从构建体系接收到这些可履行文件的途径,并将作为编译进程的一部分按需运转它们。 宏可履行文件可主动用于任何经过包清单传递依靠于它们的方针。 包含宏的完成、界说和客户端的最小包如下所示:

import PackageDescription
import CompilerPluginSupport
let package = Package(
    name: "MacroPackage",
    targets: [
        .macro(name: "MacroImpl"),
        .target(name: "MacroDef", dependencies: ["MacroImpl"]),
        .executableTarget(name: "MacroClient", dependencies: ["MacroDef"]),
    ]
)

宏完成将在相似于 package plugins 的沙盒中履行,防止文件体系和网络拜访。 这是一种鼓舞宏不依靠于任何状态的有用办法,除了它们被赋予扩展的特定宏扩展节点及其子节点(但不是其父节点),以及宏扩展上下文专门供给的信息。 假如将来宏需求拜访其他信息,这将经过扩展宏扩展上下文来完成,这也为编译器供给了一种机制来跟踪宏实践查询的信息。

  1. 新发布VSCode devContainers 的新功用 这些新功用它们让我的生活更轻松,所以我将它们添加到可用容器的通用目录中,以支撑在 Swift:5.7 及更高版本中运用 .devContainer 设置。 具有三个独立的功用:
  • jemalloc – 装置 jemalloc 库(假如你正在探究运用 package-benchmark 1 会很有协助)
  • swiftpm – 装置构建 SwiftPM 所需的 sqlite 和 libsqlite 库
  • foundationnetworking – 装置 libcurl-openssl 以支撑根底网络
  1. 发问怎么丈量结构实例的实践内存占用量? MemoryLayout.size(ofValue: theInstance) 但它只回来错误的巨细(或许是指针的巨细)。 将这个问题的范围缩小到仅结构体。例如:丈量仅包含结构体的字典结构占用了多少内存。 回答: 一旦部分“值”没有存储在仓库中,这个问题也变得没有意义。 假如我说 let newDict = existingDict,占用空间估量函数或许会说它们每个总共有 1024 个字节,因而您或许会得出结论,它们加起来是 2048 个字节。 但现实并非如此,由于 Dictionary 被记载为像这样的简略副本共享存储,直到一个值或另一个值发生变化; 实践总数大约是 1032 字节。 相同,您能够幻想在这些字典中还嵌套了其他字典; 假如您修正其间一个顶级词典,将分配新的存储空间,但仍将共享嵌套词典。 说“这个值能保持多少内存”肯定是有价值的,但在一种具有无处不在的引证计数(或废物收集,就此而言)的语言中,它没有一个简略的答案。

  2. 评论为什么有这么多“@”表达式? 我不是每天都运用 Swift,由于它实践上是 Apple 专用的语言。 所以当我最近回到它时,我发现了两个新问题。 运用 Swift 5 编译器编译后运转良好的代码在运用 5.9-dev 编译器构建时无法正确运转。 后者会产生曾经不存在的运转时错误。 检查一些示例代码,我看到比曾经更多的 @ 表达式,例如 @frozen、@State、@stateobject 等。 有没有完整的列表? 这些都有什么用? 文档(在其存在的范围内)含糊不清。 这些表达式不会下降代码的可读性吗? 回答: 一些“@表达式”内置于编译器中,如@available、@propertyWrapper、@dynamicMemberLookup。 大多数由 SwiftUI 等库以 Property Wrappers 的方式供给 这些表达式不会下降代码的可读性吗?相反,与手卷替代方案相比,它们大大进步了可读性。 特点包装器让您能够提取主动应用于获取或设置值的可重用行为(如 JS 2 中的处理程序办法或 Python 1 中的描述符)。 例如,每次写入符号为@Published 的特点时,您的 ObservedObject 都会主动宣布一个 objectWillChange 事情。 假如 @Published 特点包装器不存在,代码中的 @ 符号就会削减,但您还需求在每次写入特点时履行相似 objectWillChangePublisher.send() 的操作。 这很费力,引进了张狂的重复和忘掉这样做的时机。 在不知不觉中,您会在论坛上看到相似以下的问题: 发问者:“为什么当我更改此特点时我的视图没有更新?” 回答者:“由于你忘掉了 objectWillChangePublisher.send()。” 发问者:“为什么结构不能主动为我调用它?” 因而,出现了特点包装器。

  3. 发问SwiftUI 怎么只启动一次 onApper?

  4. 发问挑选撤销 macOS 上的主动 Foundation 链接?

  5. GSoCSwift参与GSoC 2023! 很高兴与我们共享,Swift 将再次参与 Google Summer of Code 3! 到现在为止,或许您现已看到潜在的参与者开端了一些论题 上一年,咱们设法运转了 5 个很棒且成功的项目。 假如您对它们是什么感到猎奇,您能够直接在 Swift 博客 10 上从他们的参与者和导师那里了解相关信息。 本年,咱们现已收集了一些潜在的项目主意以及他们自愿参与 Swift 网站的导师:Swift.org – GSoC 2023 的项目主意 23。 本年咱们准备了一个专门针对 GSoC 6 的新论坛类别,由于咱们发现尽管有些项目有很好的空间来评论它(比如服务器类别),但有些项目曾经并没有真正的评论空间( 之后)他们开端了。 咱们依然鼓舞运用 gsoc-2023 标签 2 来符号一切与 gsoc 相关的线程,而且并非一切线程都需求属于这个新类别。 然而,这个类别应该有助于引导评论,不然没有一个很好的归宿。 与往常相同,咱们期待听到您的项目主意,并主张在新论坛类别中翻开一个主题,描述您的项目主意以及您需求协助以使其成为现实的范畴。 假如某个项目看起来很有吸引力而且有或许在 GSoC 时刻结构内完成,咱们将尽最大努力为其寻觅导师。 咱们对有助于“Swift 项目”的项目感爱好,其间包含各个要点范畴的各种项目。 以下是一些或许成为 GSoC 项目创意候选者的项目示例: Swift 编译器 2 自身(类型检查器、前端、后端、标准库),项目能够包含改进调试、性能、添加一个小功用, 相关包,如 Collections、Async Algorithms、SwiftSyntax、SourceKit-LSP、DocC、Distributed Actor Cluster 等 1, 主要由服务器生态体系运用的包,包含为尚未支撑的数据库、队列或其他 API 提议新的库, Swift Package Manager 2、Swift 网站、文档或 Swift 的其他部分。 您能够在咱们的 Swift 博客上回忆上一年的成功项目 10 ,了解接受了哪些类型的项目。 本年咱们还为非 Apple 职工开放了导师人物。 假如您是一位经验丰厚的 Swift 奉献者,而且有爱好作为 GSoC 导师为咱们的参与者供给辅导,请留心进一步的公告,或运用下面的联络方式与我联络。 这对咱们来说是一个新流程,所以咱们将看看它是怎么运作的,但咱们有爱好向更广泛的 Swift 项目奉献者开放辅导。 作为 GSoC 体验的一部分,咱们也在考虑供给更多时机与其他 Swift 奉献者会面。

  6. GSoC有爱好运用 Swift 中的脚原本改善用户体验

引荐博文

运用 async let 在 Swift 中并行运转后台使命

摘要: 本文介绍了怎么在后台履行长时间运转的使命并保持 UI 呼应。async/await 供给了履行异步使命的洁净机制。答应并行履行多个后台使命。

怎么在 Swift 中撤销后台使命

摘要: Swift 5.5 中引进的 async/await 语法答应以可读的方式编写异步代码。异步编程能够进步应用程序的性能,一同很重要的一点是要撤销不需求的使命,以保证暂时不需求的后台使命不会搅扰应用程序。本文演示了怎么撤销使命,并解说了怎么主动撤销子使命。

怎么在 Flutter 中运用 async/await

摘要: 在本文中展示了一系列异步完成示例,并在最终给出三个组件(Futureasyncawait)的运用说明。

论题评论

程序员摄生喝什么?

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

关于咱们

Swift社区是由 Swift 爱好者共同维护的公益组织,咱们在国内以微信公众号的运营为主,咱们会共享以 Swift实战SwiftUlSwift根底为中心的技能内容,也收拾收集优秀的学习材料。

特别感谢 Swift社区 编辑部的每一位编辑,感谢我们的辛苦支付,为 Swift社区 供给优质内容,为 Swift 语言的发展奉献自己的力量。

本文正在参与「金石方案」