# 62 : 让 Swift 更强,也更简单

发表于

Photo by Raychan on Unsplash

为您每周带来有关 Swift 和 SwiftUI 的精选资讯!

肘子的话

两年前,一位朋友问我,他六岁的孩子对编程产生了兴趣,有什么编程语言可以推荐。考虑到他已经有了 iPad 和 MacBook,我毫不犹豫地推荐了 Swift Playgrounds。几天前,另一位朋友也咨询了类似的问题,尽管我仍然推荐 Playgrounds,但远没有两年前那样坚决。因为如今的 Swift 是否还适合初学者,我有些不确定了。

今年对于许多 Swift 开发者来说,或许都算不上平静。随着 Swift 6 的到来,我们不得不面对越来越多的编译警告。尽管从编译层面防止数据竞争的初衷是好的,但 Swift 6 的“并发优先”原则,却让一些简单场景下的代码编写也变得束手束脚,多少有些不便。

好在 Swift 社区注意到了开发者的反馈。几天前,Swift 语言指导小组(Language Steering Group, LSG))发布了他们在 2025 年的主要关注领域。其中,首要项目便是 “使 Swift 并发更易于上手和采用”。这无疑是令人欣慰的。

在 11 月发表的愿景中,开发团队提出了一个构想:允许开发者以模块为单位,选择默认以 MainActor 隔离的方式进行编译。这将创建一种 “单线程模式”,从而消除一些由 Swift 6 并发安全检查引起的警告。这一举措,无疑能极大地改善开发体验,减少非并发场景下的不必要困扰。

Swift 语言逐渐走向复杂化,这几乎是每一个发展到一定阶段、并且具有雄心的语言的必然趋势。不过一旦这种复杂化影响了语言的易学性,动摇的将是这门语言的根基。

真心希望 Swift 能在不断提高自身上限的同时,也能始终保持对初学者的友好,甚至能够进一步降低入门的难度。毕竟,一门好的编程语言,既要能解决复杂的问题,也应该能够让初学者轻松入门。

原创

Core Data 的模型继承

Core Data 的一个卓越特点是让开发者能够以更加接近面向对象编程的方式声明数据模型,同时无需关心底层的存储实现细节。在这个框架中,模型继承是一个尤为重要的机制。本文将深入探讨模型继承的核心概念,包括父实体(Parent Entity)、子实体(Sub Entity)和抽象实体(Abstract Entity);我们将分析它们的优缺点,并探讨在不直接使用这些功能时如何实现类似的效果。

写这篇文章的灵感源自我最近对苹果第一方应用中 Core Data 使用情况的研究,尤其是它们在数据模型构建中的实践。让我意外的是,模型继承在这些应用中的使用频次和深度都超出了我的预期,这也激发了我进一步探讨这一机制的应用场景与优势。

近期推荐

Apple 在 iOS 18 中对 Swift 和 SwiftUI 的应用 (Apple’s Use of Swift and SwiftUI in iOS 18)

一如既往的精彩,Alexandre Colucci 在 2024 年底再次为开发者带来了对 iOS 18 内置应用编程语言和 UI 框架使用情况的详尽分析。文章中的数据清晰展现了 Swift 和 SwiftUI 在苹果生态系统中的持续增长趋势。

尽管 SwiftUI 的份额仍在稳步扩大,但其增速在最近几个系统版本中已呈放缓趋势。如果希望 SwiftUI 在未来承担更大的角色,还需要在功能和稳定性上做进一步提升。

SF Symbol:在 Swift 和 SwiftUI 中的使用指南 (SF Symbol: How to for Swift & SwiftUI)

SF Symbols 是苹果为开发者提供的一套高质量、统一的图标库,大大简化了图标设计的难题,尤其对独立开发者和小型团队而言意义非凡。Antoine van der Lee 在这篇文章中全面梳理了 SF Symbols 的使用技巧、动画效果、自定义方法及版权限制等重要内容,为开发者提供了一份了解和使用 SF Symbols 的优质指南。

为什么流量控制很重要?(Why is Flow Control Important?)

Combine 提供了许多与流量控制(背压)相关的操作符,但 Swift 的新并发模型目前尚未为 AsyncSequence 提供足够数量的背压 API。在这篇帖子中,Quinn 探讨了在使用 AsyncSequence 时,如何在数据发送和接收端有效管理数据流,以避免因数据生产速度过快而引发的内存问题。同时,他还提到 Swift 社区正在讨论的一种增强流量控制的方案:MultiProducerSingleConsumerChannel,为开发者提供了更强大的工具来管理数据流。

在 Swift 测试中模拟网络连接 (Mocking a Network Connection in Your Swift Tests)

通过模拟网络,可以有效避免外部依赖(如网络波动或服务器中断)对测试结果的影响,确保测试可重复运行、相互独立并支持并行执行。Donny Wals 在这篇文章中探讨了两种常见的模拟方法:Mock 网络层URLProtocol。Mock 网络层通过协议和 Mock 对象隔离依赖,适合专注于测试业务逻辑;而 URLProtocol 提供对网络实现的精细控制,通过拦截网络请求验证请求内容和模拟响应,特别适合复杂网络交互的验证。这两种方法灵活互补,为开发者提供了高效构建可靠测试的工具和思路。

将 Image Playground 集成到你的应用中 (Bringing Image Playground to Your App)

作为 Apple Intelligence 的一部分,Image Playground 使用户能够直接在设备端生成有趣且独特的图像。Antonella Giugliano 在文章中详细介绍了如何将这一功能无缝集成到 SwiftUI 和 UIKit 应用中,帮助开发者充分利用 Apple Intelligence 模型,快速实现图像生成功能,为应用注入更多创意和表现力。

Swift Macro 系列

Swift Macro 的强大之处在于其依托 SwiftSyntax 库,提供了对源代码的精确控制力。Kingnight 在这一系列文章中,通过深入讲解宏的基础概念和实践操作,带领读者了解如何操控抽象语法树(AST)实现强大的代码生成功能。该系列文章对 Swift 宏的实现原理和使用技巧进行了系统和深入的剖析,是开发者深入学习和掌握 Swift 宏技术的重要参考。

探索 MLX Swift:将设备端推理集成到你的应用中 (Exploring MLX Swift: Adding On-Device Inference to your App)

MLX 是一个专为 Apple Silicon 优化的机器学习框架,支持大语言模型 (LLMs) 在设备端运行,从而增强隐私保护并支持离线使用场景。Rudrank Riyam 在文中详细讲解了如何通过 MLX Swift 框架,将 LLM 推理功能集成到 iOS 应用中。他通过一个 SwiftUI 示例,从模型加载到文本生成,完整演示了实现过程,为开发者快速上手提供了清晰的指导。

活动

展望未来:打造出色的 visionOS App (线下)

1月8日上午10:00-下午5:00

参加在上海 Apple 开发者中心举办的为期一天活动,了解如何打造出色的 visionOS App。 你将通过三个讲座学习如何开始使用 SwiftUI,探索一流的 App,并深入了解 RealityKit 和 Reality Composer Pro。随后,你还将听取开发者社区成员的分享,并有机会体验一系列 visionOS App 示例。

线下与会者将可享用午餐。请注意,此活动的名额有限。活动语言为普通话。

活动安排

  • 上午 10:00 讲座:从 SwiftUI 入手
  • 上午 11:00 讲座:构建 3D 沉浸式内容
  • 中午 12:00:午餐
  • 下午 1:00 讲座:结合 SwiftUI 和 RealityKit 的强大功能
  • 下午 2:00:开发者案例学习与演示
  • 下午 4:00 – 5:00:visionOS App 体验与讨论

申请

请在 12 月 26 日晚上 11:45 (GMT+8) 之前提交申请。

每周一晚,与全球开发者同步,掌握 Swift & SwiftUI 最新动向
可随时退订,干净无 spam