通过 WWDC 2023,我们了解到 Swift 宏的目标是: 消除重复代码 让繁琐的事情变得简单 以软件包的形式与其他开发者分享 然而,这些目标并不是 Swift 宏所独有的。对于 Swift 中的许多代码重用手段而言,这些都是共同的目标,如函数、类型和模块。可以说,所有高级编程语言都希望实现这些目标。Swift 宏必须在其他方面有所胜出;否则的话没必要存在。 那么, Swift 宏到底擅长什么? 这个问题的答案至关重要。 Swift 宏独一无二的优势会决定它的本质:这可以指导我们创作有效的 Swift 宏、告诉我们在创作宏时的行为边界,并最终帮助我们产出良好设计的 Swift…
介绍 最近,我的一位同事试图将引用语义模型用 ObservableObject 和 @StateObject 迁移到 SwiftUI。由于网上有很多关于用这种方式来迁移引用语义模型到 SwiftUI 的例子,在这篇文章中我不打算重点讨论这种方法的一般情况,而是想重点讨论在我和我的同事寻找答案使其代码正常工作的过程中发现的更有价值的三个话题。这些话题是: 在 SwiftUI 中真相源 (Source of Truth) 是什么? 在 SwiftUI…
故事 这周,我的同事问了我一个问题:在 SwiftUI 中怎么观察用户对 Picker 的选择行为? 这是一个来自真实业务的问题,所以我觉得值得我花费时间去解决它。 范例代码如下所示,然后我的同事想观察用户对 Picker 候选项的选择行为。 分析 但是,「观察」本身的意义可能会随着上下文变动而变动: 它可以表示用户在 Picker 上放下手指的那一刻。 它可以表示用户在 Picker 上抬起手指的那一刻。 它可以表示 Picker 对 $selection 进行值变更的那一刻。 上述每一项都将导致不同的最终解决方案。 因为 SwiftUI 控件可以使用 style…
前言 苹果在 WWDC 2019 向开发者介绍了 SwiftUI。多数人也许会将 SwiftUI 看成又一个如 Flutter 或者 React.js 又或者 Vue.js 这样踩在声明式、无状态 UI 编程潮流浪尖的 UI 框架。虽然 SwiftUI 与上述框架有着非常多的共同点,但是 SwiftUI 从设计到实现上都与上述框架有着本质的不同。 实际上,相较于是一个编程框架,SwiftUI 更加像是一种编程语言。不相信?让我来看看一个用「原生」SwiftUI 代码编写的斐波那契数列计算程序。 然后通过添加以下两行代码,我们可以在 Swift Playground…