肘子的 Swift 周报 #022 | 忙碌的一周

肘子的话

欢迎访问 fatbobman.substack.com 订阅本周报的中英文电子邮件版

上周对苹果公司而言是相当忙碌的一周。他们发布了搭载 M3 芯片的 MacBook Air、推出 iOS 17.4 版本让欧盟用户可以接入第三方应用商店,并且在官网上对 Spotify 和欧盟表达了不满,同时还暂停了 Epic 的开发者账户(据悉将很快恢复)。此外,苹果还发布了 Xcode 15.3 版本,并随之带来了 Swift 5.10 的更新。

在这众多更新中,对开发者而言最重大的莫过于 Swift 5.10 的发布。并发模型最早在 Swift 5.5 版本中引入,包括了 async/awaitactor 和结构化并发等特性。随后的 Swift 5.7 版本引入了 Sendable,作为确保类型在并发环境中线程安全的基础概念。而今,Swift 5.10 在启用完整并发检查选项后,将强制在语言的所有方面实施完全的数据隔离,以编译时检查为手段确保安全。

我在使用 Swift 5.10 重新编译现有项目代码时,主要遇到的问题源于新引入的 strict concurrency for global variables 机制,尤其是对类型属性的警告。现在开发者们应该尽早启用严格的并发检查,为接下来的 Swift 版本做好准备。

可能很快,社交媒体上就会充斥着关于 Xcode 中各种错误和警告的截图。希望大家能以平和的心态面对这个或许"痛苦"的转变过程,毕竟这是向前迈进、提升代码质量和应用稳定性的必经之路。

前一期内容全部周报列表

原创

如何为 SwiftData 动态的构建复杂的谓词

Fatbobman( 东坡肘子 )

NSCompoundPredicate 让开发者能够将多个 NSPredicate 对象组合成一个复合谓词。这一机制特别适用于那些需要基于多重判断标准进行数据过滤的场景。然而,在 Swift 重构的新 Foundation 框架中,缺失了与 NSCompoundPredicate 相对应的直接功能,这一变化对希望利用 SwiftData 构建应用的开发者造成了不小的挑战。本文旨在探索如何在当前的技术条件下,利用 PredicateExpression,动态地构建出符合 SwiftData 需求的复杂谓词。

在过去的三周里,我通过三篇文章探讨了 Swift Predicate 的原理和结构,以及如何 在 SwiftData 中处理 Predicate 可选值 的相关注意事项。通过一段时间的实践,Swift Predicate 对我产生了深远的影响。它不仅在特定框架中发挥作用,我预见在未来的开发过程中,Swift Predicate 将在更多数据逻辑判断的场景中广泛应用。

近期推荐

SwiftUI-First Architecture

Mike Apurin

自 SwiftUI 问世以来,寻找最合适的架构便成为了广受关注的议题。Mike Apurin 在尝试传统框架模式后发现这些方法未能满足他的需求,因此他倡导了一种 "SwiftUI-first" 的架构理念。这一理念主张充分利用 SwiftUI 所提供的工具与特性,例如 @State@Environment,而不是将其硬套在传统的架构模式上。他所推崇的 SwiftUI-first 架构,强调了灵活性与可扩展性,鼓励开发者充分利用 SwiftUI 的最新功能,并根据各自项目的需求灵活调整架构,以达到最佳的应用表现。

High Performance Swift Apps

Jacob Bartlett

开发应用只是第一步;关键在于确保其运行安全且高效。Jacob Bartlett 在本文中透彻阐述了他对新应用的性能优化的完整流程。借助具体的代码改善、Instruments 工具分析以及性能对比数据,文章全方位展示了各项优化措施如何显著提升应用性能。这些优化最终确保了应用能高效生成 2FA 代码,并最大化地利用了设备的多核 CPU,以此提供更快的处理速度和优化的用户体验。虽然介绍特定优化技巧的文章不在少数,但像本文这样对整个应用优化过程进行深入分析的内容却相对罕见,对开发者而言具有极高的参考价值。

Pitfalls and solutions when building Metal Shaders for Core Image Kernel

JuniperPhoton

作为专业拍照软件 PhotoCam 的开发者,JuniperPhoton 对图像处理的效率和质量持有严格的标准。他在本文中深入分析了使用 Core Image 框架搭配 Metal 着色器进行图像处理时所面临的挑战及其相应的解决策略。文章不只是提供了实际的技术详情,还揭示了如何规避一些常见的问题,对于那些希望深入理解 Core Image 与 Metal 联合应用的开发者来说,这无疑是极具价值的参考资料。

Swift 5.10

Michael Tsai

近日,随着 Xcode 15.3 的发布,Swift 5.10 正式面世。该版本在并发语言模型中引入了完全数据隔离机制,为即将发布的 Swift 6 版本奠定了坚实基础。Michael Tsai 收集了来自不同专家对 Swift 5.10 新特性的点评和综述,涉及了核心功能的总结及其对未来的潜在影响。

正如 第20期周报 所讨论,开发者们应尽早为 Swift 6 做准备。虽然我在之前已经启用了完整的并发检查,但升级到 Xcode 15.3 后,现有项目代码还是遇到了一些新问题。解决这些问题越早,将来面临的挑战就越小。

Migrating my SwiftUI App to VisionOS in 2 Hours

Cihat Gündüz

在这篇文章里,Cihat Gündüz 详细讲述了他如何在两小时内,将他的 SwiftUI 应用 CrossCraft 成功迁移到 visionOS 上。虽然将迁移时间压缩到两小时可能听起来有些夸张,但 Cihat 通过直播整个过程并分享视频,实实在在地展示了这一成就。这一经历向我们展示,若你的应用已经在 iPadOS 和 macOS 上运行良好,那么将其适配到 visionOS 相对来说会简单许多。本文不仅记录了详细的迁移步骤,还为想要迅速将自己的应用转移到 visionOS 的开发者们提供了宝贵的建议和指南。

往期内容

THANK YOU

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

欢迎访问 fatbobman.substack.com 订阅本周报的中英文电子邮件版本。

相关推荐
一丝晨光2 天前
继承、Lambda、Objective-C和Swift
开发语言·macos·ios·objective-c·swift·继承·lambda
KWMax2 天前
RxSwift系列(二)操作符
ios·swift·rxswift
Mamong3 天前
Swift并发笔记
开发语言·ios·swift
小溪彼岸3 天前
【iOS小组件】小组件尺寸及类型适配
swiftui·swift
Adam.com3 天前
#Swift :回调地狱 的解决 —— 通过 task/await 来替代 nested mutiple trailing closure 来进行 回调的解耦
开发语言·swift
Anakki3 天前
【Swift官方文档】7.Swift集合类型
运维·服务器·swift
KeithTsui4 天前
集合论(ZFC)之 联合公理(Axiom of Union)注解
开发语言·其他·算法·binder·swift
東三城4 天前
【ios】---swift开发从入门到放弃
ios·swift
文件夹__iOS7 天前
[SwiftUI 开发] @dynamicCallable 与 callAsFunction:将类型实例作为函数调用
ios·swiftui·swift