{"data":{"allPost":{"edges":[{"node":{"slug":"/post/2022/08/using-functional-binding-to-observe-in-swiftui-19a8","title":"在 SwiftUI 中使用函数式 Binding 实现观察者模式","subtitle":"","isPublished":true,"createdTime":"2022-08-19T00:00:00.000Z","lastModifiedTime":null,"license":null,"tags":["SwiftUI","Binding","Swift","观察者模式"],"category":"编程","file":{"childMdx":{"excerpt":"故事 这周，我的同事问了我一个问题：在 SwiftUI 中怎么观察用户对  Picker  的选择行为？ 这是一个来自真实业务的问题，所以我觉得值得我花费时间去解决它。 范例代码如下所示，然后我的同事想观察用户对  Picker  候选项的选择行为。 分析 但是，「观察」本身的意义可能会随着上下文变动而变动： 它可以表示用户在  Picker  上放下手指的那一刻。 它可以表示用户在  Picker  上抬起手指的那一刻。 它可以表示  Picker  对  $selection  进行值变更的那一刻。 上述每一项都将导致不同的最终解决方案。 因为 SwiftUI 控件可以使用 style…"}}}},{"node":{"slug":"/post/2022/03/unexplained-swiftui-the-programming-language-nature-of-swiftui-d20e","title":"SwiftUI 探秘 - SwiftUI 的编程语言本质","subtitle":"","isPublished":true,"createdTime":"2022-03-06T00:00:00.000Z","lastModifiedTime":null,"license":null,"tags":["SwiftUI 探秘","SwiftUI","Swift"],"category":"编程","file":{"childMdx":{"excerpt":"前言 苹果在 WWDC 2019 向开发者介绍了 SwiftUI。多数人也许会将 SwiftUI 看成又一个如  Flutter  或者  React.js  又或者  Vue.js  这样踩在声明式、无状态 UI 编程潮流浪尖的 UI 框架。虽然 SwiftUI 与上述框架有着非常多的共同点，但是 SwiftUI 从设计到实现上都与上述框架有着本质的不同。 实际上，相较于是一个编程框架，SwiftUI 更加像是一种编程语言。不相信？让我来看看一个用「原生」SwiftUI 代码编写的斐波那契数列计算程序。 然后通过添加以下两行代码，我们可以在 Swift Playground…"}}}},{"node":{"slug":"/post/2023/03/adapting-reference-semantics-model-in-swiftui-the-basics-f521","title":"在 SwiftUI 中适配引用语义模型 -- 基础篇","subtitle":"","isPublished":true,"createdTime":"2023-03-02T00:00:00.000Z","lastModifiedTime":null,"license":null,"tags":["SwiftUI","Swift","适配器模式","引用语义","Binding"],"category":"Programming","file":{"childMdx":{"excerpt":"介绍 最近，我的一位同事试图将引用语义模型用  ObservableObject  和  @StateObject  迁移到 SwiftUI。由于网上有很多关于用这种方式来迁移引用语义模型到 SwiftUI 的例子，在这篇文章中我不打算重点讨论这种方法的一般情况，而是想重点讨论在我和我的同事寻找答案使其代码正常工作的过程中发现的更有价值的三个话题。这些话题是： 在 SwiftUI 中真相源 (Source of Truth) 是什么？ 在 SwiftUI…"}}}},{"node":{"slug":"/post/2023/08/swift-macro-revisited-the-strengths-and-essence-a5a4","title":"再探 Swift 宏 - 优势与本质","subtitle":"","isPublished":true,"createdTime":"2023-08-08T00:00:00.000Z","lastModifiedTime":null,"license":null,"tags":["Swift","宏"],"category":"编程","file":{"childMdx":{"excerpt":"通过 WWDC 2023，我们了解到 Swift 宏的目标是： 消除重复代码 让繁琐的事情变得简单 以软件包的形式与其他开发者分享 然而，这些目标并不是 Swift 宏所独有的。对于 Swift 中的许多代码重用手段而言，这些都是共同的目标，如函数、类型和模块。可以说，所有高级编程语言都希望实现这些目标。Swift 宏必须在其他方面有所胜出；否则的话没必要存在。 那么， Swift 宏到底擅长什么？ 这个问题的答案至关重要。 Swift 宏独一无二的优势会决定它的本质：这可以指导我们创作有效的 Swift 宏、告诉我们在创作宏时的行为边界，并最终帮助我们产出良好设计的 Swift…"}}}},{"node":{"slug":"/post/2025/03/when-the-swift-compiler-deleted-code-in-stdlib-9067","title":"当 Swift 编译器删除了标准库中的代码 - 记修复 Swift 6 中的冗余 Load 指令消除优化器","subtitle":"","isPublished":true,"createdTime":"2025-03-09T00:00:00.000Z","lastModifiedTime":null,"license":null,"tags":["Swift","Compiler"],"category":"Programming","file":{"childMdx":{"excerpt":"最新更新：苹果已接受该问题的修复。最终解决方案在相关代码所有者 review 后进行了调整。 蛇年春节假期前，一位同事向我展示了一个由 use-after-free（释放后使用）错误导致的神秘崩溃。最近，我有时间深入研究这个问题，并发现崩溃是由 Swift 编译器的错误编译引起的。下面是最小复现代码，必须使用  -Osize  优化级别编译。我们可以通过在编译过程中启用地址检查器（address sanitizer）来检测 use-after-free 问题。 有趣的是，将  AutoreleasingUnsafeMutablePointer…"}}}},{"node":{"slug":"/post/2023/08/swift-macro-revisited-traps-and-pitfalls-1034","title":"再探 Swift 宏 - 陷阱与缺陷","subtitle":"","isPublished":true,"createdTime":"2023-08-10T00:00:00.000Z","lastModifiedTime":null,"license":null,"tags":["Swift","宏"],"category":"编程","file":{"childMdx":{"excerpt":"在之前的文章中，我们学习了使得 Swift 宏独一无二的优势和本质。文中的示例工作正常，但是我们现在可以放心大胆地实现任何 Swift 宏了吗？ 答案是否定的。 给 Swift 宏带来优势的特性也会引入陷阱与缺陷，从而让程序员自己给自己造成麻烦。在本文中，我想向你展示我发现的一些问题以及避免它们的方法。 陷阱与缺陷 控制流的潜在混乱 在之前的文章中的  #unwrap  示例中，Swift 宏展开可能涉及到 控制流操控 和 词法作用域共享 ： 展开之前： 展开之后： 由于示例宏展开中涉及控制流的  return…"}}}}]}},"pageContext":{"slug":"/zh-Hans/tag/swift","locale":{"identifier":"zh-Hans","slug":"/zh-Hans"},"title":"Tags > Swift","showsPageTitle":true,"keywords":["WeZZard","Pieces of My Soul"],"description":"","items":["46abd102-d678-5362-9d51-00ffd4a02f90","c743b528-1454-53f9-9a0b-8aebda6e8d68","bfebcd5e-37cf-5ace-be71-d0ea1b5d8e48","50422053-00c8-522e-a118-2c12b7f4d13f","5c75555f-38a8-50fe-b14c-454701f208be","5b9ea0ff-9d12-540c-a169-462414cddcb7"],"paginationInfo":{"basePath":"/zh-Hans/tag/swift","pageIndex":0,"pagesCount":1,"previousPageTitle":"Earlier Posts","nextPageTitle":"Later Posts"}}}