gpt4 book ai didi

ios - 为什么不更改 @ObservedObject 更新 UIViewRepresentable?

转载 作者:行者123 更新时间:2023-11-29 13:52:34 24 4
gpt4 key购买 nike

我有一个简单的例子,我在父 View 中创建一个 @ObservedObject 并将其传递给子 UIViewRepresentable。当我单击“按钮”时,它会修改 @ObservableObject 但 subview 永远不会更新(即永远不会调用 updateUIView)。有没有其他方法可以做到这一点?

import SwiftUI

class UpdateViewState: ObservableObject {
@Published var words = ["A", "B", "C"]

func addWord(word: String) {
print("added word")
words.append(word)
}
}

struct UpdateView: View {
@ObservedObject private var state = UpdateViewState()

var body: some View {
VStack {
UpdateViewRepresentable(state: state)
Text("Button").onTapGesture {
self.state.addWord(word: "A")
}
}
}
}

struct UpdateViewRepresentable: UIViewRepresentable {
@ObservedObject var state: UpdateViewState

func makeUIView(context: Context) -> UILabel {
let view = UILabel()
view.text = "Hello World"
return view
}

func updateUIView(_ uiView: UILabel, context: UIViewRepresentableContext<UpdateViewRepresentable>) {
print("updateUIView")
uiView.text = state.words.joined(separator: ", ")
}
}

最佳答案

试试这个:

public final class UpdateViewState: ObservableObject {

@Published var words = ["A", "B", "C"]

func addWord(word: String) {
print("added word ", words)
words.append(word)
}
}

struct ContentView: View {

@EnvironmentObject private var state: UpdateViewState

var body: some View {
VStack {
UpdateViewRepresentable(state: .constant(state))
Text("Button").onTapGesture {
self.state.addWord(word: "A")
}
}.onAppear() {
self.state.words.append("aha")
}
}
}

struct UpdateViewRepresentable: UIViewRepresentable {

@Binding var state: UpdateViewState

func makeUIView(context: Context) -> UILabel {
let view = UILabel()
view.text = "Hello World"
return view
}

func updateUIView(_ uiView: UILabel, context: UIViewRepresentableContext<UpdateViewRepresentable>) {
print("updateUIView")
uiView.text = state.words.joined(separator: ", ")
}
}

关于ios - 为什么不更改 @ObservedObject 更新 UIViewRepresentable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58916278/

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