我看了一些关于数据绑定(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/