vrw*_*wim -2 swift swiftui combine
This tutorial by Apple about SwiftUI uses a dollar sign to bind data, and I‘m having trouble finding more information about this data binding in SwiftUI.
Is this some sort of inout type parameter? That uses the ampersand to pass it on.
mat*_*att 12
在WWDC 2019视频415中对此进行了很好的解释。您只是在查看一种广泛语言功能的特殊情况,即属性包装。
属性包装器(例如@State)实际上是一种引用具有相同名称(例如State)的类型(通常是struct或enum)的实例的方式。后者提供了有关将此实例属性转换为计算属性的指令,该计算属性的getter和setter是自身(其wrappedValue)的某个计算属性的getter和setter 。它通常还拥有该计算属性的私有存储支持。
因此,在声明之后
@State var showFavoritesOnly = true
Run Code Online (Sandbox Code Playgroud)
... showFavoritesOnly转换为计算属性,其getter和setter由State结构提供。设置showFavoritesOnly为true时,它将通过State结构的setter进行路由,并最终到达State实例的存储属性中。
所有这一切都暗示着某处有是与您相关国家的实例showFavoritesOnly。有,但是它是看不见的。如果您想查看该State实例,其名称为_showFavoritesOnly。
好的,但是当您说时$showFavoritesOnly,您不会得到State struct;您将获得一个绑定结构。为什么?这是因为属性包装器具有一种机制,用于指定$名称应返回的值。在State的情况下,它指定此值应该是其自己的binding属性,即Binding(请参阅docs:https : //developer.apple.com/documentation/swiftui/state)。
碰巧的是,Toggle的isOn初始化程序采用了Binding(同样,请参阅文档https://developer.apple.com/documentation/swiftui/toggle/3232112-init)。你不可能设定切换的isOn到showFavoritesOnly就算你想!相反,您将其设置Binding<Bool>为State实例提供的,以便Toggle与State对象具有自动双向通信。SwiftUI框架强制执行自己的正确用法;一个切换可以存在只关于某些绑定,这些绑定充当其打开/关闭状态的基础真理源。并且由于它是绑定,而不仅仅是Bool,因此通信在两个方向上都起作用:当用户在Toggle中轻按Toggle的开关时,值的更改将通过绑定“向上”流动到State变量。
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |