init()中Swiftui变量前面的下划线是什么意思?

ffx8fchx  于 2023-02-28  发布在  Swift
关注(0)|答案(2)|浏览(241)

momentDate前面的下划线是什么意思?为什么需要它?

flmtquvp

flmtquvp1#

带下划线的变量名指的是Binding结构的底层存储。这是称为属性 Package 器的语言功能的一部分。
给定一个变量声明@Binding var momentDate: Date,您可以访问三个变量:

  • self._momentDateBinding<Date>结构本身。
  • self.momentDate相当于self._momentDate.wrappedValue,是Date,在视图体中呈现日期时会用到它。
  • self.$momentDate相当于self._momentDate.projectedValue,也是Binding<Date>,如果子视图需要更改日期,您可以将其传递给子视图。

对于Binding,“投影值”($)就是self_$之间的区别只是access level。但是,其他属性 Package 器可能投影不同类型的值(请参阅语言指南中的@SmallNumber示例)。

vd8tlhqk

vd8tlhqk2#

正式文件
绑定是各种属性 Package 之一。
当你在一个var上使用一个@PropertyWrapper时,它合成了方便代码。
这包括自动创建一个名为_yourPropVar的私有变量,其类型为YourPropertyWrapper(例如Binding)。
当你在它前面加上下划线时,你引用的是合成的私有变量--属性 Package 器本身。
当您引用yourPropVar而不使用underscore时,它将访问合成的 Package 值getter。

相关问题