pin*_*ock 12 swift swiftui property-wrapper
我知道这@Binding是一个属性包装器,我相信这Binding<Type>是一种类型转换的形式,但实际上有什么区别?
例如声明一个 var,如下所示:
@Binding
var hidden: Bool
Run Code Online (Sandbox Code Playgroud)
相对
var hidden: Binding<Bool>
Run Code Online (Sandbox Code Playgroud)
jn_*_*pdx 14
你是对的,这@Binding是一个属性包装器。更具体地说,它是 a DynamicProperty,这意味着它能够View在其值发生变化时通知其父级触发渲染。
@Binding这样做的同时保持与底层的相当透明的接口Bool。例如,在View您@Binding var hidden: Bool定义为属性的地方,您可以编写hidden = falseor Text(hidden ? "hidden" : "visible"),就像hidden常规的一样Bool。如果你想访问底层Binding<Bool>,你可以使用$:
$hidden //<-- Binding<Bool>
Run Code Online (Sandbox Code Playgroud)
在你的第二个例子中,Binding<Bool>不是“类型转换”,而是“类型注释”——通过编写var hidden: Binding<Bool>,你告诉编译器这hidden是Binding<Bool>。因为它Binding<Bool>不仅仅是一个Bool(而且不是一个@Binding),所以你不能像它只是一个一样对待它Bool。例如,hidden = false不适用于. Binding<Bool>相反,要访问基础Bool值,您可以使用其.wrappedValue属性:hidden.wrappedValue = false。
两者非常相似,但在几个重要方面有所不同(如上面详述的那样)。实际上:
View,您可能最终会使用@Binding.Binding<Bool>(从技术上讲@Binding,没有什么可以阻止您在 a 之外使用View,但这在语义上是一个奇怪的决定) 。| 归档时间: |
|
| 查看次数: |
2388 次 |
| 最近记录: |