swift - 理解 SwiftUI 中的@Binding

标签 swift swiftui

我看了一些关于数据绑定(bind)的WWDC视频和Apple文档,根据我目前的理解,@State作为属性委托(delegate)将提供 View 和被注释属性之间的绑定(bind)连接,例如:

@State var myText: String

var body: some View {
  VStack {
    TextField($myText, placeholder: Text("input"))
    Text(myText)
  }
}

这会将 myText 与我添加的文本字段的内容绑定(bind)(即一个更改另一个将跟进更新)

但是,虽然我知道 $myText 指的是 Binding 的绑定(bind)类型,但我注意到 Binding 也是一个属性委托(delegate),并且我注意到它出现在 Apple 的一些代码示例中。我不知道这作为属性委托(delegate)有什么用。 @State 已经完成了绑定(bind)工作,那么我们还需要 @Binding 做什么? Apple 文档目前对此一无所知。

最佳答案

根据这个 WWDC 谈话(通过 Swift UI 的数据流):

https://developer.apple.com/wwdc19/226

@State 应用于 View 内的本地/私有(private)更改。理想情况下,它们是私有(private)的。

@Binding 应该在 subview /可重用组件中使用,当值位于当前 View 域之外时。

您可以在 presentation(:_) API 中看到它。

它们内部可能有一堆状态,告诉 SwiftUI 如何显示它们 - 但它是否应该出现的决定取决于 super View ,因此 @Binding (isShowing) 你需要提供。

关于swift - 理解 SwiftUI 中的@Binding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56488929/

相关文章:

ios - 在 RxSwift 中手动发出事件

swift - 我在 Swift UI 结构中可以拥有的状态变量的最大数量是多少,性能会随着变量的增加而降低吗?

swiftui - TabView 干扰启动屏幕标题高度

ios - 为什么我在 SwiftUI 中更改发布的数组后,他没有更改?

ios - 执行从 GameScene 到主菜单的 Segue

swift - 如何通过按下按钮来检查用户是否位于正确的区域? swift

ios - 重命名 Xcode 6 项目 : "linker command failed with exit code 1 (use -v to see invocation)" 后出错

iOS dyld : Symbol not found: _NSUserActivityTypeLiveActivity

swift - 在 SwiftUI 中从 BindableObject 调用 Debounce 方法

ios - 键盘出现后布局被破坏