@State 自动生成下划线前缀的成员变量

问题描述

我通过 Xcode 自动完成建议注意到 @State 似乎不仅会自动生成一个$ 为前缀的成员来访问相应的 Binding(众所周知),而且还会自动生成一个 { {1}} 前缀成员,似乎暴露了实际的 _ 包装器。

这让我想知道它的用例是什么,文档中在哪里提到了它?

enter image description here

解决方法

我发现这实际上是由于 Swift(而不是 SwiftUI)在幕后编译 propertyWrapper 的方式。

来自 official swift docs(在 propertyWrapper 下):

编译器通过在被包装属性的名称前面加上下划线 (_) 来合成包装器类型实例的存储——例如,someProperty 的包装器存储为 _someProperty。包装器的合成存储具有私有访问控制级别。

这是每次使用 propertyWrapper 时发生的情况:

enter image description here (来自better programming

至于它在 SwiftUI 上下文中的实际应用,您可以使用它来初始化 @State 变量,如 this SO answerthis blog post 中所述。