首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在平淡中等待 WWDC 2025 | 肘子的 Swift 周报 #084

在平淡中等待 WWDC 2025 | 肘子的 Swift 周报 #084

作者头像
东坡肘子
发布2025-05-20 15:20:54
发布2025-05-20 15:20:54
1890
举报

weekly.fatbobman.com[1]订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本[2]查看更多的文章。加入 Discord[3]社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。

在平淡中等待 WWDC 2025

不知不觉,距离 WWDC 2025 开始只有 20 天了。在过去的几年中,每当此时我都会写几篇文章畅想 WWDC 上会带来的新功能和我期待的一些变化。

然而,或许是因为最近两年 WWDC 上展示的许多新功能并未完全落地,就我个人而言,今年似乎少了往日的热情和渴望。希望这只是我个人的情况。

期待越高,失望越大。避免失望的最好方式莫过于调整期待值。今年,我选择以更加平和的心态迎接 WWDC 的到来,不过分期待,不盲目乐观,但也不放弃对技术进步的关注与思考。

你呢?对即将到来的 WWDC 2025,你有什么期待或想法?

原创

揭秘 .ignoredByLayout():让视觉变换“隐形”于布局之外[4]

在 SwiftUI 的众多 API 中,.ignoredByLayout()算是一位“低调的成员”。相关资料稀少,应用场景也不常见,其名称本身就容易引发困惑。它似乎暗示着某种对布局的“忽略”,但这与我们熟知的 offsetscaleEffect等修饰符默认不影响父布局的行为有何不同? ignoredByLayout究竟在什么时机工作?它到底“忽略”或“隐瞒”了什么?本文将为你揭开这个 SwiftUI 布局机制中微妙 API 的面纱。

近期推荐

为上下文菜单加点料 (Accessorise Your Context Menu Interactions)[5]

在 iOS 信息应用中,用户点击消息后会弹出一个包含多种表情的辅助视图,其精巧的设计和自然的展开动画令人印象深刻。遗憾的是,苹果始终未开放这一实现方式的相关 API。在本文中,Seb Vidal[6]详尽介绍了如何通过 UIKit 的私有类 _UIContextMenuAccessoryView,为自己的 App 添加类似的交互体验。由于涉及私有 API,该方案存在 App Store 审核风险。为此,作者还提供了一个 App Review 安全的 Swift 实现分支[7],通过更动态和间接的方式实现类似效果,适合在测试或内部工具中使用。

Aether[8]基于该研究开发了 MenuWithAView[9],使 SwiftUI 开发者也能轻松为上下文菜单添加自定义辅助视图。

图表对齐之谜,终于解开了 (Finally Fixing My Swift Charts Alignment Problem)[10]

在使用 Swift Charts 时,Chris Wu[11]遇到了一个奇怪的问题:基于 LineMark绘制的图表始终无法精确对齐午夜,往往略晚开始、略早结束。经过长时间查阅文档、向 AI 求助无果后,最终他在 Stack Overflow 中一条仅有两赞的评论中找到了关键线索。

问题出在 .value(_:unit:)unit参数上——它会让绘图点落在两个单位之间的中点(例如 .hour会将 8:00 显示在 8:30),这虽然适用于柱状图,却会使折线图产生对齐偏差。移除 unit:calendar:后,图表终于与午夜轴线完美对齐。

AI 的知识边界受限于语料覆盖面,对于这种缺乏广泛讨论的问题,反而不如一个冷门但关键的手动搜索来得管用。

让 Picker 支持“未选择” (SwiftUI Picker With Optional Selection)[12]

SwiftUI 中有不少实用却鲜为人知的 API 细节——至少在读这篇文章之前,我并不知道 .tag可以直接支持 nil。在本文中,Keith Harrison[13]展示了一个简单而实用的技巧:如何让 Picker与可选类型的 Binding协同工作,并支持“不选任何值”这一场景,适用于诸如“无项目”或“重置选择”等常见需求。

Swift 6.2 默认隔离机制解析 (Default isolation with Swift 6.2)[14]

在 Swift 6 对并发的严格检查下,即便代码只在单线程中运行,开发者仍需添加大量显式标注以满足类型系统的安全要求。为此,Swift 6.2 引入了一个重要改进:默认隔离(default isolation)Matt Massicotte[15]在本文中介绍了如何通过 .defaultIsolation(MainActor.self)在模块级设置默认隔离策略,从而减少冗余标注,并改善 Swift 并发的开发体验。

这是一次给予开发者更多控制权的更新,但也意味着更大的设计抉择:是将整个项目默认隔离为 @MainActor,还是继续使用显式标注?Swift 正在迈向更安全的并发模型,而如何选择默认值,将成为每个团队的重要决策。

别把 SQLite 放进 App Group (SQLite Databases in App Group Containers: Just Don't)[16]

为了在 Widget 和 App Intents 中共享数据,许多开发者选择将 SQLite 数据库存放在 App Group 容器中。然而,Ryan Ashcraft[17]指出,这种看似合理的做法可能导致难以调试的系统崩溃,最典型的是神秘的 0xDEAD10CC错误。该错误并非死锁,而是 iOS 为防止挂起进程长期持有文件锁、阻塞其他进程访问数据库,而强制终止 App 的机制。Ryan 在文中详解了触发机制及多个缓解方案,但也坦言这些策略实现复杂、效果有限。

0xDEAD10CC是 iOS 系统层面的老问题,Michael Tsai[18]也就此整理了一个讨论汇总帖[19],欢迎加入交流。

用自定义 Modifier 优雅管理焦点 (Simplifying Focus Management in SwiftUI with a Custom ViewModifier)[20]

SwiftUI 的 @FocusState虽然为聚焦控制提供了便利,但其局限也很明显:无法与 @Binding直接联动、难以在视图之间传递,且无法用于 ViewModel 中的状态管理。在复杂表单或状态驱动的 UI 中,这些问题尤其突出。Artem Mirzabekian[21]在本文中提出了一个更灵活的替代方案——FocusModifier,它通过可选绑定(Binding<T?>)管理聚焦状态:当值匹配时自动聚焦视图,失焦时清除绑定。这种做法使焦点控制更加可组合、可测试,也便于将逻辑抽离至 ViewModel。

工具

Swift 6.1 编程指南中文版[22]

在过去的两个月里,SwiftGG 翻译组对《Swift 编程指南》进行了重要升级:不仅将手册内容同步至 Swift 6.1,还对中文官网的设计风格进行了调整,使其与 Swift 官方文档保持一致,带来更加统一和现代的阅读体验。

访问 SwiftGG 在 GitHub 上的仓库[23],了解如何参与《Swift 编程指南》中文版的维护工作。

RedLine[24]

Redline 是由 Robb Böhnke[25]开发的 SwiftUI 视图 Modifier 合集,提供了丰富的可视化工具,用于标示视图的位置、尺寸、间距和对齐方式,帮助开发者快速验证布局实现或排查界面问题。

小提示:Robb 为每个 Modifier 都提供了代码预览,不仅便于理解和使用,也是一份出色的 SwiftUI 布局教学资源。

THANK YOU

如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞赞赏,并将其 转发给更多的朋友。

参考资料

[1]

weekly.fatbobman.com: https://weekly.fatbobman.com

[2]

肘子的 Swift 记事本: https://fatbobman.com

[3]

Discord: https://t.ly/gzxeh

[4]

揭秘 .ignoredByLayout():让视觉变换“隐形”于布局之外: https://fatbobman.com/zh/posts/demystifying-swiftuis-ignoredbylayout/?utm_source=fatbobman%20weekly%20issue%2084&utm_medium=web

[5]

为上下文菜单加点料 (Accessorise Your Context Menu Interactions): https://l.fatbobman.com/w084-01

[6]

Seb Vidal: https://x.com/SebJVidal

[7]

App Review 安全的 Swift 实现分支: https://github.com/sebjvidal/_UIContextMenuAccessoryView-Demo

[8]

Aether: https://x.com/AetherAurelia

[9]

MenuWithAView: https://github.com/Aeastr/MenuWithAView

[10]

图表对齐之谜,终于解开了 (Finally Fixing My Swift Charts Alignment Problem): https://l.fatbobman.com/w084-02

[11]

Chris Wu: https://bsky.app/profile/chriswu.com

[12]

让 Picker 支持“未选择” (SwiftUI Picker With Optional Selection): https://l.fatbobman.com/w084-03

[13]

Keith Harrison: https://x.com/kharrison

[14]

Swift 6.2 默认隔离机制解析 (Default isolation with Swift 6.2): https://l.fatbobman.com/w084-04

[15]

Matt Massicotte: https://mastodon.social/@mattiem

[16]

别把 SQLite 放进 App Group (SQLite Databases in App Group Containers: Just Don't): https://l.fatbobman.com/w084-05

[17]

Ryan Ashcraft: https://mastodon.social/@ryanashcraft

[18]

Michael Tsai: https://mastodon.social/@mjtsai

[19]

讨论汇总帖: https://mjtsai.com/blog/2025/05/15/sqlite-databases-in-app-group-containers-dont/?utm_source=fatbobman%20weekly%20issue%2084&utm_medium=web

[20]

用自定义 Modifier 优雅管理焦点 (Simplifying Focus Management in SwiftUI with a Custom ViewModifier): https://l.fatbobman.com/w084-06

[21]

Artem Mirzabekian: https://x.com/livsycode

[22]

Swift 6.1 编程指南中文版: https://l.fatbobman.com/w084-07

[23]

SwiftGG 在 GitHub 上的仓库: https://github.com/SwiftGGTeam/the-swift-programming-language-in-chinese

[24]

RedLine: https://l.fatbobman.com/w084-08

[25]

Robb Böhnke: https://mastodon.social/@dlx

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 肘子的Swift记事本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在平淡中等待 WWDC 2025
    • 原创
      • 揭秘 .ignoredByLayout():让视觉变换“隐形”于布局之外[4]
    • 近期推荐
      • 为上下文菜单加点料 (Accessorise Your Context Menu Interactions)[5]
      • 图表对齐之谜,终于解开了 (Finally Fixing My Swift Charts Alignment Problem)[10]
      • 让 Picker 支持“未选择” (SwiftUI Picker With Optional Selection)[12]
      • Swift 6.2 默认隔离机制解析 (Default isolation with Swift 6.2)[14]
      • 别把 SQLite 放进 App Group (SQLite Databases in App Group Containers: Just Don't)[16]
      • 用自定义 Modifier 优雅管理焦点 (Simplifying Focus Management in SwiftUI with a Custom ViewModifier)[20]
    • 工具
      • Swift 6.1 编程指南中文版[22]
      • RedLine[24]
      • THANK YOU
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档