在此示例中,当我在屏幕上拖动时,为什么LabelViewRepresentable
在每次“ updateUIView”调用之前都被重新初始化?如果我将计数器设为@State
属性而不是@EnvironmentObject
属性,则它只会初始化一次,就像我期望的那样。
import SwiftUI
class Counter: ObservableObject {
@Published var count = 0
}
struct CounterView: View {
@EnvironmentObject var counter: Counter
var body: some View {
LabelViewRepresentable(count: $counter.count)
.gesture(DragGesture().onChanged({ _ in
self.counter.count += 1
}))
}
}
struct LabelViewRepresentable: UIViewRepresentable {
@Binding var count: Int
private var view: UILabel
init(count: Binding<Int>) {
print("init")
let label = UILabel()
label.text = "0"
self.view = label
self._count = count
}
func makeUIView(context: UIViewRepresentableContext<LabelViewRepresentable>) -> UILabel {
print("makeUIView")
return view
}
func updateUIView(_ uiView: UILabel,context: UIViewRepresentableContext<LabelViewRepresentable>) {
print("updateUIView")
view.text = "\(count)"
}
}