PreferenceKey 是 SwiftUI 中用于将数据从 子视图(Child View) 向 父视图(Parent View) 或 祖先视图 传递的一种机制。 在 SwiftUI 的标准数据流中,数据通常是向下流动的(通过 、 或构造函数参数)。但是,当你需要子视图告诉父视图某些信息(例如子视图的实际大小、滚动位置、或者自定义的导航标题)时,就需要用到 。 --- 核心概念 要使用 ,你需要理解三个部分: 1. Key (键): 一个遵守 协议的结构体,定义了数据的默认值以及如何合并多个子视图传来的数据。 2. Sender (发送者/子视图): 使用 修饰符发送数据。 3. Receiver (接收者/父视图): 使用 监听数据的变化。 --- 如何使用:分步指南 我们将通过一个经典的例子来演示:父视图获取子视图的大小(Size)。 第一步:定义 PreferenceKey 你需要创建一个遵循 协议的结构体。 第二步:子视图发送数据 在子视图中,我们通常结合 来获取尺寸,然后通过 发送出去。 第三步:父视图接收数据 在父视图中,使用 来读取数据。 --- 函数的进阶用法 ...