【发布时间】:2020-11-15 09:34:03
【问题描述】:
在一个父 SwiftUI 视图中,我需要保持对作为 UIViewRepresentable 的子视图的引用。为此,我在父级初始化期间创建了一个子视图的实例,并将其分配给一个属性。这很好用。
struct parentView: View {
var childView: ChildView
init() {
self.childView = ChildView()
}
var body: some View {
childView
}
}
我的问题是当子视图需要一些绑定作为参数时。由于绑定尚未初始化,Xcode 会引发错误。我该如何解决?
struct parentView: View {
@State private var property1: Bool = false
var childView: ChildView
init() {
self.childView = ChildView(property1: $property1)
}
var body: some View {
childView
}
}
struct ChildView: UIViewRepresentable {
@Binding var property1: Bool
// code
}
或者可能是我错了,除了保持对它们的引用之外,还有其他解决方案可以直接访问子视图的功能。
【问题讨论】:
-
SwiftUI 视图不是引用类型,它是 struct - value,你不能一直引用它。
-
为什么您需要保留对子视图的引用?
-
大家好,我知道 SwiftUI 不是引用类型,但在某些特定情况下仍然需要它。在我的例子中,UIViewRepresentable 是一个 Mapbox 地图,并且这个视图有一些特定的方法不用于设置/绘制视图,比如转换 CGPoint 中的坐标。我的父视图使用它来执行一些操作。
-
您应该了解如何重构代码。将视图与模型分开,以便视图是一次性的。
-
@Paulw11,我不知道该怎么做......你有什么想法吗?