momentDate前面的下划线是什么意思?为什么需要它?
flmtquvp1#
带下划线的变量名指的是Binding结构的底层存储。这是称为属性 Package 器的语言功能的一部分。给定一个变量声明@Binding var momentDate: Date,您可以访问三个变量:
Binding
@Binding var momentDate: Date
self._momentDate
Binding<Date>
self.momentDate
self._momentDate.wrappedValue
Date
self.$momentDate
self._momentDate.projectedValue
对于Binding,“投影值”($)就是self,_和$之间的区别只是access level。但是,其他属性 Package 器可能投影不同类型的值(请参阅语言指南中的@SmallNumber示例)。
$
self
_
@SmallNumber
vd8tlhqk2#
正式文件绑定是各种属性 Package 之一。当你在一个var上使用一个@PropertyWrapper时,它合成了方便代码。这包括自动创建一个名为_yourPropVar的私有变量,其类型为YourPropertyWrapper(例如Binding)。当你在它前面加上下划线时,你引用的是合成的私有变量--属性 Package 器本身。当您引用yourPropVar而不使用underscore时,它将访问合成的 Package 值getter。
var
@PropertyWrapper
_yourPropVar
YourPropertyWrapper
yourPropVar
underscore
2条答案
按热度按时间flmtquvp1#
带下划线的变量名指的是
Binding
结构的底层存储。这是称为属性 Package 器的语言功能的一部分。给定一个变量声明
@Binding var momentDate: Date
,您可以访问三个变量:self._momentDate
是Binding<Date>
结构本身。self.momentDate
相当于self._momentDate.wrappedValue
,是Date
,在视图体中呈现日期时会用到它。self.$momentDate
相当于self._momentDate.projectedValue
,也是Binding<Date>
,如果子视图需要更改日期,您可以将其传递给子视图。对于
Binding
,“投影值”($
)就是self
,_
和$
之间的区别只是access level。但是,其他属性 Package 器可能投影不同类型的值(请参阅语言指南中的@SmallNumber
示例)。vd8tlhqk2#
正式文件
绑定是各种属性 Package 之一。
当你在一个
var
上使用一个@PropertyWrapper
时,它合成了方便代码。这包括自动创建一个名为
_yourPropVar
的私有变量,其类型为YourPropertyWrapper
(例如Binding
)。当你在它前面加上下划线时,你引用的是合成的私有变量--属性 Package 器本身。
当您引用
yourPropVar
而不使用underscore
时,它将访问合成的 Package 值getter。