gpt4 book ai didi

swift - Swift 中@Binding 和 Binding 的区别

转载 作者:行者123 更新时间:2023-12-05 03:29:08 27 4
gpt4 key购买 nike

我明白 @Binding是一个属性包装器,我相信 Binding<Type>是类型转换的一种形式,但实际上有什么区别?

例如声明一个 var 如下:

@Binding
var hidden: Bool

对比

var hidden: Binding<Bool>

最佳答案

你是对的 @Binding是一个属性包装器。更具体地说,它是一个 DynamicProperty ,这意味着它有能力通知它的 parent View在其值更改时触发渲染。

@Binding在保持与底层 Bool 相当透明的接口(interface)的同时执行此操作.例如,在 View 中你在哪里@Binding var hidden: Bool定义为一个属性,你可以写 hidden = falseText(hidden ? "hidden" : "visible") , 就像 hidden是常客Bool .如果您想访问底层 Binding<Bool> , 你可以使用 $ :

$hidden //<-- Binding<Bool>

在你的第二个例子中,Binding<Bool>不是“类型转换”,而是“类型注释”——写成var hidden: Binding<Bool> ,你告诉编译器 hiddenBinding<Bool> .因为它是 Binding<Bool>而不仅仅是 Bool (而不是 @Binding ),你不能像对待它只是一个 Bool 那样对待它.例如,hidden = falseBinding<Bool>一起工作.相反,访问底层 Bool值,你可以使用它的 .wrappedValue属性:hidden.wrappedValue = false .

两者非常相似,但在几个重要方面有所不同(如上面详述的)。 在实践中:

  • 如果您将绑定(bind)用作 View 的属性,您可能最终会使用 @Binding .
  • 如果您在 View 之外绑定(bind)它(因此没有使用 DynamicProperty 方面),您可能会使用 Binding<Bool> (技术上,没有什么可以阻止您在 @Binding 之外使用 View,但这是一个语义上奇怪的决定)。

关于swift - Swift 中@Binding 和 Binding<Type> 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71073898/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com