欢迎访问 weekly.fatbobman.com[1]订阅本周报的电子邮件版本。你也可以直接访问我的网站 肘子的 Swift 记事本[2]查看更多的文章内容。
大语言模型已然成为我日常工作和生活中不可或缺的得力助手。目前,我主要通过对话方式与它互动。虽然随着模型能力的提升,这种交流方式越发流畅自然,但当各类需求混杂在同一会话中时,效率往往难以达到理想状态。为此,我在过去几周开始尝试运用提示词来定制一些面向特定任务的专用会话。
在这个过程中,我没有选择使用流行的 AI 智能体构建工具,而是依托 ChatGPT 提供的 MyGPT 功能展开尝试。虽然具备一定的编程经验,了解如何将复杂任务分解为简单模块(例如函数),但将这种分解思维迁移到 AI 任务中时,我仍面临诸多挑战。如何有效划分任务、确保每个模块输出稳定且符合预期,这些工作并不像编写代码那样直观。可以说,基于大模型的抽象思维与传统编程中的抽象逻辑有着本质区别。在对提示词优化和大模型工作原理理解尚浅的情况下,即便是设计一个简单的 AI 工具,要想生成稳定、准确的结果也绝非易事。对我而言,为工作和生活中打造一系列高效、可靠的 AI 小工具,仍是一个需要持续探索的课题。
值得期待的是,随着 M4 等高性能设备的普及,以及其他高效 AI 本地推理设备的问世,微调和定制小型模型的成本正在快速下降。若能将专属模型与经过针对性优化的提示词相结合,个人化需求的 AI 小工具开发必将迎来显著突破,性能、稳定性表现也会得到更好的保证。
我期待在不久的将来,这些稳定可靠的 AI 小工具能够如同我为自己编写的日常小程序一般,自然地融入工作与生活流程中,成为更加得心应手的助手,让效率和体验同步提升。
欢迎 点赞、 转发
从 Xcode 16 开始,SwiftUI Preview 的工作机制发生了重要变化,其中最显著的改进是:Build and Run 与 Preview 共享同样的构建产物,从而提升了 Preview 的构建效率。御姐 (Onee)[4]在本文中,深入探讨了 Xcode 16 下 Preview 的工作原理,详细分析了在项目代码不同程度修改的情况下,Preview 如何通过三层重构策略应对变化以提高效率。文章最后还对 SwiftUI Preview 和 Flutter 的 Hot Reload 进行了对比,指出了目前 SwiftUI Preview 机制的不足和改进潜力。
Swift 6 模式带来了强大的数据竞争检查能力,但对开发者也提出了更高的代码质量要求。Majid Jabrayilov[6]在本文中结合实际项目,分享了他的经验和实用技巧:如何高效利用Sendable
值类型、何时将引用类型隔离在@MainActor
中,以及如何通过actor
优雅地管理有状态的服务类型。文章通过接近实际项目的代码示例,为 Swift 6 并发编程提供了切实可行的指导。
从 Swift 5.5 开始,即使枚举没有设定 Raw 值,只要声明Codable
,编译器即可自动生成编解码逻辑,大幅提升开发效率。但在许多场景下,开发者仍需要自定义编解码过程以满足特定需求。在这篇文章中,Natalia Panferova[8]分享了枚举Codable
的多种自定义技巧,包括调整枚举项名称、关联参数名称以及实现完全自定义逻辑,帮助开发者在与 API 交互或数据持久化时更灵活地处理复杂需求。
在 Swift 6 的诸多新特性中,类型化抛出(Typed Throws)无疑是其中的亮点之一。它允许开发者在函数中显式指定可能抛出的错误类型,大幅提升了错误处理的可读性和精确性。尽管这一特性可能增加一些前期工作,但在调用基于类型化抛出构建的 API 时,其优势立刻显现。Vera Dias[10]在本文中通过清晰的图文示例,详细介绍了类型化抛出的使用方法,展示了它如何帮助开发者简化错误处理逻辑,并降低对通用错误捕获的依赖。
在 SwiftUI 中,searchable
修饰器让搜索功能变得简单易用,但频繁的输入会导致不必要的检索请求或性能消耗。Daniel Saidi[12]分享了他解决方案:通过创建可复用的搜索上下文类,结合 Debounce 技术,将查询操作延迟到输入暂停后再执行。这种方法不仅提升了应用的响应速度,还显著减少了多余的操作。
SwiftData 的@ModelActor
提供了更加安全的并发操作体验,但也对 CRUD 操作的实现提出了全新的要求。Leo Dion[14]在本文中分享了一套设计优雅且功能强大的 API,通过引入Queryable
协议和类型安全的Selector
,极大地简化了 CRUD 操作的代码,并增强了操作的可靠性。此外,作者特别警示了 PersistentIdentifier 的临时状态问题,提醒开发者不要对临时 ID 进行跨上下文传递。
CKSyncEngine[16]是苹果在 WWDC 2023 推出的框架,大幅降低了开发 CloudKit 数据同步的复杂性。虽然 Core Data 和 SwiftData 提供了内置的 CloudKit 同步支持,但其高度自动化让开发者难以对同步过程进行细粒度控制。赵英杰 (Yingjie Zhao)[17]在本文中详细介绍了如何结合 CKSyncEngine 和 SwiftData 构建更加灵活的 iCloud 同步方案。通过自定义同步管理器、实现增量同步、处理服务器变更及错误,作者展示了一种平衡自动化与手动控制的同步实现方式,为构建高效、可靠的同步系统提供了参考。
尽管 Core Data 和 SwiftData 的默认同步功能更全面、更通用( 例如妥善解决了 CloudKit 关系数量和记录尺寸的限制 ),但在特定场景下,借助 CKSyncEngine 的自定义能力,可以带来更高的灵活性和更独特的用户体验。
Swift 运行时(libswiftCore)是一个与所有 Swift 程序同时运行的 C++ 库,为语言的核心功能提供支持,例如内存管理、错误处理、动态派发以及类型和泛型的处理。Jacob Bartlett[19]从一段简单的 Swift 代码出发,追踪其从编译到执行的全过程,包括 Swift 中间语言(SIL)、LLVM 中间表示(IR),以及运行时 ABI 函数调用,深入解析 Swift 运行时的操作机制及其如何与编译器协作完成核心语言特性的实现。
如果你觉得这份周报或者我的文章对你有所帮助,欢迎点赞、赞赏,并将其转发给更多的朋友。
参考资料
[1]
weekly.fatbobman.com:https://weekly.fatbobman.com
[2]
肘子的 Swift 记事本:https://fatbobman.com
[3]
探究 SwiftUI Preview 的工作原理:https://t.ly/Ltlls
[4]
御姐 (Onee):https://x.com/spatial_onee
[5]
全面升级 Swift 6:应用代码库的迁移指南 (Adopting Swift 6 Across the App Codebase):https://t.ly/oJ5cX
[6]
Majid Jabrayilov:https://x.com/mecid
[7]
Swift 枚举的 Codable 支持 (Codable Conformance for Swift Enums):https://t.ly/wqec-
[8]
Natalia Panferova:https://x.com/natpanferova
[9]
Swift 6:类型化抛出 (Swift 6: Typed Throws):https://t.ly/unDDK
[10]
Vera Dias:https://x.com/CodingWithVera
[11]
在 SwiftUI 中实现去抖搜索 (Creating a Debounced Search Context for Performant SwiftUI Searches):https://t.ly/FpuGC
[12]
Daniel Saidi:https://x.com/danielsaidi
[13]
使用 ModelActor 实现 SwiftData 的 CRUD 操作 (SwiftData CRUD Operations with ModelActor):https://t.ly/Zk2xQ
[14]
Leo Dion:https://x.com/leogdion
[15]
SwiftData 结合 CKSyncEngine 实现 iCloud 同步:https://t.ly/Skzaj
[16]
CKSyncEngine:https://developer.apple.com/documentation/cloudkit/cksyncengine-5sie5
[17]
赵英杰 (Yingjie Zhao):https://x.com/izhaoyingjie
[18]
🪜 Swift运行时:你的无声伙伴 (The Swift Runtime: Your Silent Partner):https://t.ly/405hb
[19]
Jacob Bartlett:https://x.com/jacobtechtavern
[20]
Swift Student Challenge 将于 2 月 3 日开放申请:https://t.ly/Upcbs
[21]
进一步了解资格条件以及如何准备:https://t.ly/Upcbs