肘子的 Swift 周报 #019 | 超越代码,拥抱思维转变

2024-02-26 16:21:23 浏览数 (2)

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

肘子的话

经过几个月对 SwiftData 的研究,我最近才在项目中正式采用了它。然而,我发现与使用 Core Data 相比,编写代码的效率有所下降。这并非因为 SwiftData 难以使用,实际上,尽管 SwiftData 是在 Core Data 的基础上发展而来,但要想正确地使用和深入理解它,我必须放弃许多我以前掌握的 Core Data 经验,尝试采用与 SwiftData 设计哲学更为契合的编程逻辑,这个过程中我不得不几次重新开始。

我注意到,许多开发者在从 Core Data 转换到 SwiftData 的过程中,往往只花费了几天甚至更短的时间。这种做法容易导致一个问题:仅仅将 SwiftData 当作 Swift 语言化的 Core Data,并简单地将 Core Data 的代码转化为 SwiftData 的代码。这种情况不仅仅发生在 SwiftData 的应用中,在使用 Observation 框架时,也有开发者仅仅是将基于 ObservableObject 的代码转换为新的模式。这种做法严重削弱了框架转换带来的结构和思维转变的机会,这是一个巨大的遗憾。

SwiftUI 自发布以来已五年,尽管发展速度并不算快,但苹果公司已经逐步向开发者们提供了一套更为全面的现代化编程框架。当前,开发者所面临的主要挑战,是缺乏对这套框架的深入理解和实践经验。在进行框架转换的过程中,开发者不应仅仅局限于代码层面的直接转换,更为关键的是要进行思维和理念上的转变,这样才能真正发掘并利用新框架的全部潜力。

前一期内容全部周报列表

原创

探讨 SwiftUI 中的属性包装器:@UIApplicationDelegateAdaptor、@AccessibilityFocusState、@FocusedObject、@FocusedValue 和 @FocusedBinding[2]

Fatbobman( 东坡肘子 )[3]

在本文中,我们将对 @UIApplicationDelegateAdaptor@AccessibilityFocusState@FocusedObject@FocusedValue@FocusedBinding 等属性包装器进行探讨。这些属性包装器涵盖了不同框架声明周期的整合、辅助聚焦、焦点值观察管理等功能。

Swift 语言的属性包装器与 SwiftUI 诞生于同一年。SwiftUI 充分利用这一功能,为开发者提供了一系列属性包装器,极大地简化了开发过程。在这个系列[4]的四篇文章中,我们详细梳理了截至 iOS 17 时期 SwiftUI 所提供的全部属性包装器,旨在帮助开发者更加高效和便捷地使用 SwiftUI。希望这些内容能对大家在使用 SwiftUI 时提供有价值的指导和帮助。

近期推荐

The Swift Method Dispatch Deep Dive[5]

Jacob Bartlett[6]

本文深入探讨了 Swift 语言中的方法派发机制,目的在于阐释 Swift 执行函数调用的机制及其对代码性能的具体影响。作者 Jacob Bartlett 采用了既详细又易于理解的方式,解析了方法派发的基本概念和各类方法派发(包括静态派发、表派发和消息派发)如何影响代码的性能表现。文章进一步讨论了通过采纳某些策略,如使用 final 关键字、方法的私有化以及全模块优化等,来降低动态派发的频率,从而有效提升 Swift 代码的运行效率。

Discovering Swift Algorithms package[7]

Majid Jabrayilov[8]

由苹果公司官方维护的 Swift Algorithms[9] 是一个开源库,旨在为 Swift 语言带来一系列高效、强大及实用的算法扩展。该库通过丰富 Swift 标准库的算法集合,为开发者在数据处理和计算执行上提供了极大的便利。在这篇文章中,Majid Jabrayilov 利用自己丰富的实践经验,向我们展示了如何借助 Swift Algorithms 库中提供的各种功能,如二分搜索、数据分块、过滤、采样和元素组合等,有效提升项目开发的效率和执行性能。

Encapsulate and Generalize in Swift[10]

Scott Smith[11]

在项目中频繁引入第三方库,导致开发者不得不在代码中大量使用 import 语句。Scott Smith 在他的文章中提出了一种策略,以减轻 Swift 项目对第三方依赖的负担:确保整个项目仅单次导入每个第三方库,并避免在变量、类名或任何其他标识符中直接使用依赖库的名称。他强调,通过封装和泛化对第三方库的引用,可以避免代码与特定库过于紧密的绑定,这种紧密绑定会在更换库或调整功能时引入不必要的复杂性和额外工作。

The SwiftUI Field Guide[12]

Chris Eidhof[13]

SwiftUI 提供了一套既丰富又强大的布局工具集,然而,对于初学者来说,仅通过阅读文档往往难以迅速理解各种布局容器及其参数的具体功能和应用效果。针对这一挑战,Chris Eidhof 推出了 ”The SwiftUI Field Guide“ 网站。该网站采用交互式演示的形式详细解释了 SwiftUI 布局系统的运作机理,旨在帮助开发者直观地掌握布局工具的使用。

需要注意的是,网站上展示的 SwiftUI 布局效果是基于 Web 技术实现的,因此其行为可能与 SwiftUI 的实际表现存在细微差别。尽管如此,这些差异并不妨碍开发者对布局容器基础功能的理解和学习。

A week on with a VisionPro[14]

Joseph Heck[15]

在本文中,Joseph Heck 记录了他初次使用 Apple Vision Pro 的体验和所思所感,目的是为了日后回顾这款产品经过数次迭代更新后的变化。虽然在使用过程中遇到了一些挑战和不足,但 Heck 对于 Apple Vision Pro 展现出的开发和应用潜力持积极态度,尤其是在信息可视化和软件调试这些领域。他对未来利用 Apple Vision Pro 进行创新和探索充满了期待,展现了一位开发者对新技术探索无限可能的热情。

THANK YOU

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

参考资料

[1]

fatbobman.substack.com: https://fatbobman.substack.com

[2]

探讨 SwiftUI 中的属性包装器:@UIApplicationDelegateAdaptor、@AccessibilityFocusState、@FocusedObject、@FocusedValue 和 @FocusedBinding: https://fatbobman.com/zh/posts/exploring-swiftui-property-wrappers-4/

[3]

Fatbobman( 东坡肘子 ): https://twitter.com/fatbobman

[4]

系列: https://fatbobman.com/zh/collections/data-flow/#属性包装器概述

[5]

The Swift Method Dispatch Deep Dive: https://t.ly/qMngU

[6]

Jacob Bartlett: https://twitter.com/jacobs_handle

[7]

Discovering Swift Algorithms package: https://t.ly/-Hu3F

[8]

Majid Jabrayilov: https://twitter.com/mecid

[9]

Swift Algorithms: https://github.com/apple/swift-algorithms

[10]

Encapsulate and Generalize in Swift: https://t.ly/b5z_r

[11]

Scott Smith: https://twitter.com/scottsmithdev

[12]

The SwiftUI Field Guide: https://t.ly/6cWsC

[13]

Chris Eidhof: https://twitter.com/chriseidhof

[14]

A week on with a VisionPro: https://t.ly/42UL5

[15]

Joseph Heck: https://mastodon.social/@heckj

0 人点赞