Swift 新特性(2026):WWDC26 更新解读
Apple 在一个 WWDC 周期内一次性发布了两个 Swift 版本:6.3 与 6.4 同时落地,”What’s new in Swift” 主题演讲把两者作为一段连续的工作整体来介绍1。这种安排很重要,因为这些变化清晰地分成了面向两类受众的内容。大多数开发者获得的是更小、日常常用的人体工学改进(去掉 any 可选类型外层的圆括号、把十几个 @available 平台名称合并为一个 anyAppleOS、在恰好一个声明中静默一条弃用警告)。而编写性能敏感代码的少数人则迎来了一份酝酿多年的回报:所有权系统如今延伸到了 for 循环、计算属性,乃至标准库本身。
2026 年的 Swift 同样明显是一个跨平台、跨语言的项目。Apple 宣布推出官方的 Android 版 Swift SDK,通过 swift.org 分发6;借助 WebAssembly 实现更快的 JavaScript 桥接;通过新的 @C 特性把 Swift 函数反向导出为 C;以及一个如今默认驱动 Swift Package Manager 的 Swift Build 后端1。本文将走过定义 2026 年 Swift 故事的四场演讲:语言与库的更新(262)、Swift Testing 迁移路径(267)、基于 gRPC 的实时服务(265),以及使用 MLX Swift 的数值计算(328)。
摘要
- Swift 6.3 与 6.4 在 WWDC26 同时发布。日常人体工学改进:无需圆括号的可选
any/some、anyAppleOS可用性、用于按声明控制警告的@diagnose特性,以及用于解决名称冲突的模块选择符(::)1。 - 所有权系统延伸到了普通代码:新的
Iterable协议让for循环可以借用(borrow)元素而非复制它们,而borrow/mutate访问器取代了get/set,从而避免在计算属性中复制大型值1。 - 新增的标准库类型为旧有的不安全模式提供了安全版本:
UniqueArray、UniqueBox、单次恢复的Continuation,以及用于在变量中持有借用或修改的Ref/MutableRef1。 - Swift Testing 现在与 XCTest 实现了双向互操作,提供四种模式(limited、complete、strict、none);Xcode 27 默认启用互操作2。
@Test、@Suite、#expect和#require这套接口记录在 Apple 的 Swift Testing 参考文档中5。 - gRPC Swift 已经成熟到这样的程度:你可以从一个
.proto文件生成类型化的客户端,得到一元(unary)加双向流式 RPC,并可部署到云端的 Linux 容器中3。 - MLX Swift 把 NumPy 风格的数组计算带入 Swift,具备自动 GPU 执行和
grad自动微分,并在 Swift、Python、C++ 和 C 前端之间共享同一个引擎4。
语言人体工学:恼人之处统统消失
这场演讲以一些”你可能几乎不会注意到、只会觉得一些小烦恼消失了”的变化开场1。它们值得一一点名,因为它们消除了十年间在这门语言里累积下来的摩擦。
Swift 团队的 Becca 和 Evan 讲解 Swift 6.3 与 6.4。语言部分大约从 0:45 开始。
现在你可以直接写 any P? 而无需用圆括号将其包裹。当一个 Swift Concurrency 任务静默丢弃了抛出的错误时,你会收到一条警告,提示你要么在任务中处理它,要么保存该任务以便稍后检查。过去不允许在 defer 块中调用 async 函数的限制已被取消,因此异步清理与延迟同步清理一直以来的运行方式一致(SE-0493,Swift 6.4)7。一个仅仅因为持有 weak var 属性而需要 @unchecked Sendable 的类,可以把该属性改为 weak let,从而符合正常的 Sendable 检查条件。一个不应当是 Sendable 的类型可以用新的 ~Sendable 语法显式声明这一点,而这并不会阻止其子类成为 Sendable1。
有两项变化你一定会注意到。第一项是可用性:Apple 去年统一了各操作系统的版本号,Swift 在此基础上更进一步,允许你把每个平台名称浓缩为一个 anyAppleOS。当你关心的各平台可用性一致时,可以一次性指定它们全部;当存在例外时,则把 anyAppleOS 设为默认值,再为例外情况添加平台专属的特性。同一个名称在 #if os(...) 条件中同样有效1。
第二项是 @diagnose 特性,它能在单个声明内部改变特定警告的行为。你可以告诉 Swift 在某个函数中忽略 deprecated declaration 警告组,从而在迁移到新 API 时无需在整个项目范围内静默它。你也可以反向使用它:在某个安全关键的函数中开启严格内存安全检查,或者把一条未来才会报错的警告立即提升为错误1。Swift 团队的工程经理 Holly Borla 在为 WWDC26 收尾时,把它列为自己最看重的功能:”我最喜欢的新功能之一是 @Diagnose 特性,它让你能控制代码中警告的行为,既可以做到诸如抑制弃用警告之类的事,也可以让你以更细的粒度选择性地开启严格内存安全或严格并发诊断,这对例如向 Swift 6 语言模式迁移这样的工作很有帮助。”8 她以同样的方式概括了整个 6.4 版本:这些更新就是在”移除那些摩擦点”,好让开发者能专注于用清晰、优美的代码表达自己的想法8。
接下来是模块选择符。当两个被导入的模块都声明了一个名为 View 的类型时,过去的办法是点语法(Rocket.SaturnV),可一旦某个名为 Rocket 的模块同时还包含一个名为 Rocket 的类型,这种写法就会失效,因为 Swift 会优先选择那个类型,进而找不到成员。Swift 6.3 引入了 ::,其中左侧的名称始终是模块名,因此 Rocket::SaturnV 会直接指向那个模块。该选择符同样适用于方法名和属性名。Apple 的建议很明确:把它用于你无法控制的模块之间的冲突,并在宏生成的代码中作为防御性手段使用;但不要刻意设计会相互冲突的 API,然后再依赖选择符去消歧1。
标准库与 Foundation
标准库迎来了若干有针对性的新增内容。任务取消屏障(withTaskCancellationShield,SE-0504,Swift 6.4)会运行一小段区域,在其中取消检查始终返回 false,因此即便外围任务已被取消,诸如完成磁盘写入这样的异步清理仍能照常执行7。mapKeyedValues 会把键和旧值都传入映射闭包,取代了当你需要用到键时 mapValues 所迫使你进行的手动字典重建。一个基于 Swift System 的全新文件路径类型,处理了路径表示在不同平台间的差异1。
Foundation 延续了它持续多年的从 Objective-C 迁移到 Swift 的进程。Apple 对 Data 进行了更多现代化改造(更快的 span 访问、相等性检查、迭代与修改),并把 NSURL 和 CFURL 统一为单一的 Swift 实现,运行更快、内存占用更少。ProgressManager 是一个为 async/await 打造的全新进度报告类型;Subprocess 包则迈入了 1.0,提供了简化的执行类型、以 AsyncBufferSequence 形式流式输出的结果,以及一个在尊重字位簇(grapheme cluster)边界的前提下逐行读取输出的 strings() 方法1。
所有权延伸到普通代码
性能这部分内容值得细读,因为它标志着一个历时多年的编译器项目终于变成了你可以在日常类型中使用的东西。核心问题在于复制:你在某处有数据,又需要它出现在另一处,于是程序就把它复制过去。当存储仍处于已分配状态、且双方都遵守 Swift 的独占性规则时,这次复制就是多余的。借用(borrow)授予对现有存储的只读访问而不复制它;修改(mutate)则授予独占写入访问。编译器在编译期对二者都进行验证,正是这一点让这项技术在原生 UnsafePointer 无法保证安全的地方变得安全1。
所有权与性能调优部分大约从 19:55 开始,涵盖内联控制、特化以及新的访问器。
如今有若干协议可以在不复制的情况下工作。Equatable、Comparable 和 Hashable 可以用于不可复制(noncopyable)类型,Equatable 和 Comparable 还扩展到了不可逃逸(non-escapable)类型。关联类型现在也可以是不可复制或不可逃逸的,正是这一点让那项重磅特性成为可能:for 循环可以直接支持的全新 Iterable 协议1。
人人都熟悉的 Sequence 协议在迭代时会把元素复制出来。Iterable 则让循环转而借用它们,这意味着它能配合不可复制的元素工作,并跳过对对象和写时复制(copy-on-write)类型的引用计数。它可以像 AsyncSequence 那样在迭代过程中抛出错误。由于借用禁止修改,独占性检查会阻止你在遍历集合的同时修改它(这是 Sequence 常见的性能陷阱)。for 循环在可用时优先选择 Sequence,否则回退到 Iterable;并且 Iterable 的迭代器是以 span 的批次而非每次一个的方式返回元素,这让循环对于那些能在一个 span 中一次性交出全部内容的类型来说效率明显更高1。
访问器也得到了同样的待遇。Apple 的示例是一个持有 256 个 Int 的 InlineArray 的 UniqueBox,在 64 位设备上是一个两千字节的结构体。使用 get/set 时,更改其中一个元素会把整个数组复制出来再复制回去。把该计算属性切换为 borrow 访问器(不复制的只读访问)和 mutate 访问器(就地的独占修改),就能让 Swift 原地更改单个元素,并让该类型得以持有不可复制的值1。
若干新的标准库类型为以往需要不安全代码才能实现的模式提供了安全替代:
UniqueArray的行为类似Array,但它是不可复制的,因此可以存储不可复制的元素,并在不固定大小的前提下避免引用计数开销。UniqueBox是一个使用新访问器的真正的标准库类型。Continuation会在编译期检查你恰好恢复(resume)它一次,从而比CheckedContinuation更安全,又与UnsafeContinuation一样高效。Ref和MutableRef的作用就像针对单个值的Span:它是一个借用或修改的容器,你可以把它存入变量、传递、返回,并用于泛型类型。你可以用前缀&从一次写入访问构建出MutableRef,而由于 ref 是不可逃逸的,Swift 知道当变量离开作用域时该次访问即告结束1。
UniqueArray 和固定容量的 RigidArray 位于一个新的 Containers 模块中(SE-0527,原则上已获接受),在它们最终落入标准库之前,你今天就可以通过 swift-collections 1.3 使用二者7。
在优化器控制方面,Swift 6.4 新增了 @inline(always) 以与由来已久的 @inline(never) 相对应(在类方法上请把它与 final 搭配使用,因为可被重写的方法可能仍然无法内联),而 Swift 6.3 则新增了 @specialized,其中的 where 子句会告诉编译器为你最常用的具体类型预先生成泛型函数的特化版本1。你很少会需要这些。而当你确实需要时,正如这场演讲所说,”你会庆幸自己拥有它们”1。
Swift Testing:迁移如今是双向的
Swift Testing 随 Xcode 16 推出,是现代化的、基于宏的、默认并行的测试库2。2026 年的故事是迁移,而关键的新增内容是测试框架互操作性:能够在一个框架的测试体内部调用另一个框架的 API,且双向都可以2。
Swift Testing 团队的 Jerry 演示在 Swift Testing 测试中调用 XCTest 辅助方法。互操作性的完整讲解大约从 5:48 开始。
Apple 推荐的迁移策略没有变:让大部分 XCTest 保持原样,用 Swift Testing 编写新测试,并迁移那些你最常改动的测试。两个框架本就可以在同一个 target 中共存。新的地方在于,你可以复用你基于 XCTest 构建的辅助代码。当一个 Swift Testing 测试调用了一个封装了 XCTFail 的 assertUnique 辅助方法时,会产生一个跨框架问题(cross-framework issue),而 Xcode 现在用四种模式来处理它2:
- Limited: 来自 XCTest 的跨框架问题为警告。在 Xcode 27 之前创建的测试计划会继承此模式,使用
swift-tools-version: 6.3的 Swift 包也默认采用它。 - Complete: 这些相同的问题保持为错误。Xcode 27 对新项目使用 complete 模式;Swift 包可通过升级到
swift-tools-version: 6.4或更新版本来选用它。 - Strict: 来自 XCTest 的跨框架问题会以致命错误终止测试,并指向每一处需要替换 XCTest API 的地方。
- None: 完全退出(仅建议临时使用,因为这些问题可能标记出真正的 bug)。
来自 Swift Testing 的跨框架问题在所有模式下都保持为错误,因此你可以放心地在 XCTestCase 内部调用 #expect 和 #require。你可以在包中通过 SWIFT_TESTING_XCTEST_INTEROP_MODE 环境变量覆盖默认值(模式名用小写)2。XCTest 演讲 262 证实了与之匹配的标准库一侧:从 Swift Testing 调用 XCTest 时,XCTest 的断言失败现在会以测试问题的形式呈现出来,因此你在迁移时不会悄无声息地丢失覆盖率1。
迁移指南涵盖了常见模式。XCTSkip 变为 Test.cancel(更好的做法是使用 .enabled/.disabled 特征,把启用逻辑从测试体中移出去)。continueAfterFailure = false 变为 #require,它在失败时抛出错误并中止测试,让你能逐个表达式地选择哪些失败应当停止执行2。互操作性支持一组有限但实用的 API:所有 XCTest 断言、两个期望宏(#expect 和 #require)、用于把 XCTest 失败标记为已知问题的 known-issue API,以及用于跳过 XCTest 用例的 Test.cancel2。
至于 API 接口本身(那些宏、特征词汇、哪些内容仍留在 XCTest 中),配套文章 Swift Testing vs. XCTest 讲解了相应的思维模型。有两点需要从那里延续过来:UI 自动化和性能测试仍然只能用 XCTest,而抛出 Objective-C 异常的代码必须保留在用 Objective-C 编写的 XCTest 中,因为 Swift 代码无法安全地处理那些异常2。一旦完成迁移,你就能获得参数化测试(每个参数都是一个独立用例,全部并行运行)以及退出测试——后者会在子进程中运行预期会崩溃的代码以验证其终止,并可在 macOS、Linux、FreeBSD 和 Windows 上使用2。
gRPC Swift:类型化的实时服务
服务端的故事最清晰地证明了,Swift 如今用同一门语言横跨了客户端与后端。这场 gRPC 演讲构建了一个与 Swift 服务器通信的 iOS 应用,且完全从一份 .proto 规范生成3。
Swift Server 团队的 George 讲解四种 RPC 类型。流式部分(包括双向流式)大约从 11:06 开始。
gRPC 是云原生计算基金会(Cloud Native Computing Foundation)的一个项目,你把 API 定义为带有类型化输入和输出的函数,而非 HTTP 端点,再从规范生成客户端代码3。工作流程是:在一个 .proto 文件中定义服务,把 grpc-swift-nio-transport(基于 SwiftNIO 的网络层)和 grpc-swift-protobuf(构建插件)添加为包依赖,附加 GRPCProtobufGenerator 这个 run-build-tool 插件,然后重新编译以生成类型化客户端。
像 ListRaces 这样的一元 RPC 发送一个请求并得到一个响应。演讲中的卡丁车演示用 withGRPCClient 把它接入一个 SwiftUI 视图,随后重构为通过 SwiftUI 环境共享单个客户端,让各视图复用连接,并在场景进入后台时断开3。Protobuf 把消息序列化为按字段编号(而非字段名称)作键的二进制,这使得一条消息”大致只有等价 JSON 消息的一半大小”3,在糟糕的移动网络上是实打实的优势。Apple 指出同样的高效也驱动着它自己的基础设施:gRPC Swift 为开源的 Containerization 框架提供进程间通信支持,并作为 Private Cloud Compute、iCloud Keychain 与 Photos,以及 SharePlay 文件共享的底层支撑3。
流式支持正是实现实时的关键所在。除了一元 RPC 之外,还有客户端流式(多个请求、一个响应)、服务端流式(一个请求、多个响应,如同实时解说流),以及双向流式。该演示使用双向流式来推送实时比赛更新:客户端流式发送它想要的事件类型,同时服务器流式发回匹配的事件。在服务端,这变成一个 async 函数,其请求参数是一个消息的 AsyncSequence,响应参数是一个写入器,并通过一个任务组和一个由互斥锁保护的已订阅事件类型集合来处理3。部署是一个多阶段的 Containerfile(用 swift:latest 构建,把发布二进制文件复制进 swift:slim),在启用 HTTP/2 的 Google Cloud Run 上运行,随后客户端把它的传输安全性从明文切换为 TLS3。
MLX Swift:读起来像数学的数值计算
MLX 这场演讲面向的是完全不同的另一类开发者:任何编写模拟、信号处理、渲染或模型训练的人。MLX Swift 像 NumPy 那样把 n 维数组作为其核心抽象,因此”大多数 NumPy 代码只需极少改动就能转换为 MLX Swift”4。
David Koski 讲解 Mandelbrot 示例。与纯 Swift 的数组计算对比大约从 4:28 开始。
MLX 是与现有的 Apple 数值技术栈并存而非取而代之:Accelerate 用于手工调优的 CPU 向量原语,BNNS 用于神经网络构建块,Metal Performance Shaders 用于直接的 GPU 内核,Swift Numerics 用于 Complex 类型。当目标是”以注重性能的眼光编写数学代码”、并且你希望代码看起来就像数学本身时,你就该选用 MLX Swift4。
有两项特性让这成为可能。惰性求值(Lazy evaluation)在你编写数组运算时构建一张计算图,在你调用 eval 或读取某个值之前什么都不运行——这正是为什么循环会在每一步调用 eval 来保持图的精简。惰性求值还驱动着自动 GPU 执行以及通过 grad 函数变换实现的自动微分4。Mandelbrot 示例把逐像素的标量循环压缩为两行(对整个网格应用 z = z * z + c,再统计有界迭代的次数),默认在 GPU 上运行,演讲指出”达到 10 倍提速当然是有可能的”4。一个热分布求解器把 Jacobi 迭代表达为单次 conv2d 调用。曲线拟合示例使用 grad 在无需任何手写导数的情况下计算精确梯度,而这正是训练每一个 ML 模型背后的同一思路4。
MLX Swift 在 MIT 许可证下开源,可通过 Swift Package Manager 安装,是共享同一套运算和惰性求值模型的四个前端(Swift、Python、C++ 和 C)之一,因此你可以”用 Python 做原型,用 Swift 交付”4。其生态系统包括 mlx-swift(核心框架)、mlx-swift-lm(语言模型实现)和 mlx-swift-examples(可运行的 LLM、扩散模型与训练示例)4。关于围绕它的设备端 ML 背景,请参阅 MLX on-device ML on Apple Silicon。
优先采纳什么
按照你的身份来安排工作的先后顺序。
如果你交付应用、且很少去碰编译器的性能旋钮,那就现在采纳这些人体工学改进,并忽略所有权系统。在你的各平台一致之处,用 anyAppleOS 替换层层堆叠的 @available 行;用 @diagnose 恰好在你正处于迁移中途的地方静默弃用警告;下一次某个依赖在像 View 这样的名称上与 SwiftUI 冲突时,伸手去用模块选择符(::)1。
如果你维护着一套庞大的 XCTest 测试集,那就今天就开启互操作性,并开始用 Swift Testing 编写新测试。把现有测试计划切换到 complete 模式,让跨框架问题成为你无法忽视的错误;通过互操作性复用你的 XCTest 辅助方法,而不是一上来就把它们重写;并迁移你最常改动的文件。把 UI 自动化、性能测试以及 Objective-C 异常测试保留在 XCTest 中12。
如果你编写性能敏感的代码,那么所有权方面的新增内容就是重头戏。审查那些持有大型值的热点计算属性,把它们从 get/set 切换为 borrow/mutate。在你以前不得不退而求其次使用 UnsafePointer 的地方,看看 Ref/MutableRef、UniqueArray 以及单次恢复的 Continuation。在伸手去用 @inline(always) 或 @specialized 之前先做测量,因为优化器通常是对的,强行干预反而可能让二进制文件变得更大、更慢1。
如果你的工作偏向服务端或数值计算,那么这些新包是可用于生产的切入点:gRPC Swift 让你从一个 .proto 文件获得类型化客户端和双向流式,而 MLX Swift 则给你 GPU 加速的数组计算以及读起来就像数学的自动微分34。
常见问题
Swift 6.3 和 Swift 6.4 有什么区别?
Apple 在同一个 WWDC26 周期内开发并发布了两者,并把它们一并呈现。大致来说,Swift 6.3 引入了模块选择符(::)和 @specialized 特性,并交付了首个官方的 Android 版 Swift SDK。Swift 6.4 增加了 anyAppleOS 可用性、无需圆括号的可选 any/some、用于 for 循环的 Iterable 协议、borrow/mutate 访问器、@inline(always)、用于把 Swift 函数导出为 C 的 @C 特性,以及嵌入式 Swift 的调试改进。演讲把两者作为一段连续的工作整体来介绍1。
我必须从 XCTest 迁移到 Swift Testing 吗?
不必。XCTest 仍在发布、仍然可用,而 Apple 的建议是渐进式的:用 Swift Testing 编写新测试,并在改动旧测试时顺带迁移它们。测试框架互操作性让两者得以在同一个 target 中共存并相互调用 API,因此你可以在 Swift Testing 测试中复用 XCTest 辅助方法。UI 自动化、性能测试以及抛出 Objective-C 异常的代码则留在 XCTest 中12。
新的 Iterable 协议能做到 Sequence 做不到的什么?
Sequence 在迭代时会把元素复制出来。Iterable 则让 for 循环转而借用元素,因此它能配合不可复制的元素工作,并跳过对对象和写时复制类型的引用计数。它以 span 的批次而非每次一个的方式返回元素,效率更高,并且可以在迭代过程中抛出错误。由于借用禁止修改,你无法在遍历集合的同时修改它。for 循环在可用时优先选择 Sequence,否则回退到 Iterable1。
我应该在什么时候用 MLX Swift 而不是 Accelerate 或 Metal Performance Shaders?
当你的首要目标是以注重性能的眼光编写数学代码、并且希望代码读起来就像数学本身,同时具备自动 GPU 执行和通过 grad 实现的自动微分时,就该用 MLX Swift。Accelerate 仍然是手工调优 CPU 向量原语的选择,BNNS 用于神经网络构建块,Metal Performance Shaders 用于直接访问 GPU 内核。MLX 是与它们并存而非取而代之4。
gRPC Swift 只用于后端服务吗?
不是。这场 WWDC 演讲把一个 iOS 应用构建为 gRPC 客户端,从一个 .proto 文件生成类型化客户端,并展示了一元加双向流式 RPC 驱动实时 UI 更新。Protobuf 的二进制编码所产生的消息大致只有等价 JSON 的一半大小,这在糟糕的移动网络上很有帮助。Apple 自己也将 gRPC Swift 用于进程间通信,以及包括 Private Cloud Compute、iCloud Keychain 与 Photos、SharePlay 文件共享在内的多项服务中3。
Apple 生态系统专题
Swift 的 2026 年更新贯穿了 Apple 生态系统系列的其余内容:关于测试模型的 Swift Testing vs. XCTest 剖析、并发变化所触及的 Observable internals in SwiftUI、框架层面的 what SwiftUI is made of,以及作为数值计算背景的 MLX on-device ML on Apple Silicon。所有这些内容的汇总入口是 Apple Ecosystem Series。关于在循环中借助 AI 智能体构建 iOS 应用,请参阅 iOS Agent Development guide。
参考资料
-
Apple, WWDC26 session 262, “What’s new in Swift”. Presented by Becca and Evan of the Swift team; covers Swift 6.3 and 6.4 language changes, standard library and Foundation updates, cross-language interoperability, and the ownership and performance-tuning additions. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Apple, WWDC26 session 267, “Migrate to Swift Testing”. Presented by Jerry of the Swift Testing team; covers test framework interoperability, its four modes, the
SWIFT_TESTING_XCTEST_INTEROP_MODEenvironment variable, parameterized tests, and exit tests. ↩↩↩↩↩↩↩↩↩↩↩ -
Apple, WWDC26 session 265, “Build real-time apps and services with gRPC and Swift”. Presented by George of the Swift Server team; covers Protobuf service definitions, the gRPC build plugin, unary and bidirectional streaming RPCs, and container deployment to the cloud. ↩↩↩↩↩↩↩↩↩↩
-
Apple, WWDC26 session 328, “Explore numerical computing in Swift with MLX”. Presented by David Koski of the MLX Swift team; covers array computing, lazy evaluation, automatic GPU execution,
conv2d, and thegradautomatic-differentiation transformation. ↩↩↩↩↩↩↩↩↩↩ -
Apple Developer: Swift Testing. Framework reference for
@Test,@Suite,#expect,#require, and the trait vocabulary referenced in the migration section. ↩ -
swift.org: Swift downloads. Source for the official Swift toolchains and SDKs, including the Swift SDK for Android announced in the session. ↩
-
Swift Evolution proposals behind the Swift 6.4 cleanup and async details: SE-0493:
deferwithasynccalls, SE-0504: Task cancellation shields (withTaskCancellationShield), and SE-0527:RigidArrayandUniqueArray, accepted in principle and available today through swift-collections 1.3. ↩↩↩ -
Apple, WWDC26 session 400, “Dub Dub Daily: Day 5”, official transcript. Holly Borla, engineering manager on the Swift team, in the closing interview with Jeff; source for the
@Diagnoseattribute remarks and the framing of Swift 6.4 as removing friction points. ↩↩