Swift 进阶:Observation 框架中可观察(@Observable)对象的高级操作(上)

news/2025/2/5 16:25:32 标签: swift, Observation, Observable, willSet, didSet, 监听, Tracking

在这里插入图片描述

概述

在 WWDC 24 中苹果推出了全新的 Observation 框架,借助于它我们可以更加细粒度的监听可观察(@Observable)对象 。同时,SwiftUI 自身也与时偕行开始全面支持 @Observable 对象的“嵌入”。

在这里插入图片描述

然而在这里,我们却另辟蹊径来介绍 @Observable 对象另外一些“鲜为人知”的故事。

在本篇博文中,您将学到如下内容:

相信学完本课后,小伙伴们一定会对“自立自强”的可观察对象的使用更加游刃有余、运用自如。

那还等什么呢?Let’s go!!!😉


Observable__18">1. “独立自主”的 @Observable 对象

Observation 框架是一个专注于观察我们活力四射、变化莫测 App 中所有可观察对象的。它在 iOS 17(macOS 14)中被引入,正好对应着 SwiftUI 5.0。

在这里插入图片描述

大家都知道,借助 SwiftUI,Observation 可以发挥出难以置信的巨大威力。不过除了和 SwiftUI “形影不离”以外,我们还可以让它雏鹰展翅独当一面。这是通过利用 withObservationTracking 方法做到的:

在这里插入图片描述

简单来说,@Observable 宏构建的可观察对象可以与 withObservationTracking 方法“琴瑟和鸣”:withObservationTracking 方法允许我们在闭包中跟踪可观察对象上所访问的属性。如果我们尝试访问的任何属性发生了变化,则该闭包将会被调用。

下面是具体的代码示例:

swift">@Observable
class Counter {
   
  var count = 0
}

class CounterObserver {
   
  let counter: Counter

  init(counter: Counter) {
   
    self.counter = counter
  }

  func observe(

http://www.niftyadmin.cn/n/5842321.html

相关文章

项目中常用中间件有哪些?分别起什么作用?

在项目开发中,常用的中间件包括消息中间件、缓存中间件、数据库中间件等,以下是一些常见的中间件及其作用: 消息中间件 Kafka:一般用于处理大规模的消息数据,具有高吞吐量、低延迟的特点,适用于日志收集、…

mysql操作语句与事务

数据库设计范式 数据库设计的三大范式 ‌第一范式(1NF)‌:要求数据库表的每一列都是不可分割的原子数据项,即列中的每个值都应该是单一的、不可分割的实体。例如,如果一个表中的“地址”列包含了省、市、区等多个信息…

windows环境下如何在PyCharm中安装软件包

windows环境下如何在pyCharm中安装wxPython软件包 在windows环境中,安装软件包可以使用 终端 的方式,在IDE下方的终端中执行pip install wxPython进行安装,安装完毕之后,使用pip show wxPython检查也符合预期。 但是在代码文件中导…

【怎么用系列】短视频戒除—1—对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面,尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨,慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…

介绍一下Mybatis的底层原理(包括一二级缓存)

表面上我们的就是Sql语句和我们的java对象进行映射,然后Mapper代理然后调用方法来操作数据库 底层的话我们就涉及到Sqlsession和Configuration 首先说一下SqlSession, 它可以被视为与数据库交互的一个会话,用于执行 SQL 语句(Ex…

芝法酱学习笔记(2.6)——flink-cdc监听mysql binlog并同步数据至elastic-search和更新redis缓存

一、需求背景 在有的项目中,尤其是进销存类的saas软件,一开始为了快速把产品做出来,并没有考虑缓存问题。而这类软件,有着复杂的业务逻辑。如果想在原先的代码中,添加redis缓存,改动面将非常大&#xff0c…

napalm_ce 报错 No module named ‘netmiko.ssh_exception‘ 解决方案(随手记)

版本 netmiko 4.1.0 napalm latest napalm-ce latest python 3.11 报错 File "venv/lib/site-packages/napalm_ce/ce.py", line 34, in <module>from netmiko.ssh_exception import NetMikoTimeoutException ModuleNotFoundError: No module named netmiko.s…

Windows安装 WSL2、Ubuntu 、docker(详细步骤 , 弃用 docker desktop )

文章目录 前言一、WSL 2和Hyper-V的区别二、 安装 WSL21. BIOS开启虚拟化2. 查看先决条件3. 开启“适用于Linux的Windows子系统”4. 启用虚拟机功能5. 将WSL设置为版本26. 更新WSL内核7.其他WSL常用命令 三. WSL2 安装 Ubuntu-24.041. 列出发行版本2.安装 Ubuntu 四、WSL2 Ubun…