数据流与状态管理

Photo by Mae Mu on Unsplash

作为一个响应式框架,SwiftUI 提供了众多可作为真理源(Source of Truth)的属性包装器,每种都有其独特的用途和特点。同时,如何有效利用 SwiftUI 提供的各种工具来管理数据流,也是摆在每位开发者面前的一个重要挑战。

属性包装器概述

属性包装器精通

  • StateObject 与 ObservedObject

    StateObject 是在 SwiftUI 2.0 中才添加的属性包装器,它的出现解决了在某些情况下使用 ObservedObject 视图会出现超预期的问题。本文将介绍两者间的异同,原理以及注意事项。

  • SwiftUI 2.0 —— @StateObject 研究

    WWDC20 刚刚结束,在过去的一周,苹果为开发者带来了巨大的惊喜。由于新特性实在太多,需要不少时间来消化,我首先选择自己最感兴趣的内容进行一些简单的研究和探讨。本文首先浅谈一下 SwiftUI 新提供的属性包装器@StateObject。

  • @State 研究

    本文试图探讨并分析 SwiftUI 中 @State 的实现方式和运行特征;最后提供了一个有关扩展@State 功能的思路及例程。读者需要对 SwiftUI 的响应式编程有基本概念。

  • ObservableObject 研究 —— 想说爱你不容易

    本文主要研究在 SwiftUI 中,采用单一数据源 (Single Source of Truth) 的开发模式,ObservableObject 是否为最佳选择。是否可以在几乎不改变现有设计思路下进行新的尝试,以提高响应效率。最后提供了一个仍采用单一数据源设计思路但完全弃用 ObservableObject 的方式。

  • @AppStorage 研究

    本文探讨的是如何优雅、高效、安全地在 SwiftUI 中使用@AppStorage,在不借助第三方库的情况下,解决当前@AppStorage 使用中出现的痛点

  • 为自定义属性包装类型添加类 @Published 的能力

    本文将对 @Published 与符合 ObservableObject 协议的类实例之间的沟通机制做以介绍,并通过三个示例:@MyPublished( @Published 的仿制版本 )、@PublishedObject(包装值为引用类型的 @Published 版本)、@CloudStorage(类似 @AppStorage ,但适用于 NSUbiquitousKeyValueStore ),来展示如何为其他的自定义属性包装类型添加可访问包裹其的类实例的属性或方法的能力。

架构

  • SwiftUI 中的 UserDefaults 与 Observation:如何实现精准响应

    在 SwiftUI 中,苹果提供的 @AppStorage 属性包装器极大地简化了开发者在视图中响应和修改 UserDefaults 内容的过程。然而,随着 Observation 框架的引入,这一领域出现了新的挑战——苹果尚未为 Observation 提供相应的 UserDefaults 管理方案。本文将探讨如何在 Observation 框架下高效且便捷地管理 UserDefaults 中的数据,并提出一个完整而实用的解决方案。

  • 深度解读 Observation —— SwiftUI 性能提升的新途径

    在 WWDC 2023 中,苹果介绍了 Swift 标准库中的新成员:Observation 框架。它的出现有望缓解开发者长期面临的 SwiftUI 视图无效更新问题。本文将采取问答的方式,全面而详尽地探讨 Observation 框架,内容涉及其产生原因、使用方法、工作原理以及注意事项等。

  • 聊一聊可组装框架( TCA )

    本文将聊聊一个与创建复杂的 SwiftUI 应用很契合的框架 —— The Composable Architecture( 可组装框架,简称 TCA )。包括它的特点和优势、最新的进展、使用中的注意事项以及学习路径等问题。

  • 用 Async-Await 重建 SwiftUI 的 Redux-like 状态容器

    本文介绍了如何使用 Swift 5.5 版本的 Async/Await 功能重构 SwiftUI 的状态容器代码。

  • 打造可适配多平台的 SwiftUI 应用

    本文是笔者参加 2023 年 4 月 20 日 “SwiftUI 技术沙龙( 北京站 )” 活动的分享内容。基于记忆整理而成。本次活动采用的是线下交流并辅以 live coding 的形式,因此内容的侧重点以及组织形式与以往的博客文章会有明显的不同。