这是我的代码。
运行 MainView 结构,然后单击应该将单词 first
更新为单词 hello
的按钮。
即使日志显示数据已正确更新,它也根本不会更新。因此,当枚举中的值发生变化时,没有办法让视图更新吗?
我让它工作的唯一方法是一个讨厌的黑客。要尝试 hack,只需取消对 3 行注释代码的注释并尝试一下。有没有更好的办法?
我看过这个类似的问题,但也有同样的问题 -> SwiftUI two-way binding to value inside ObservableObject inside enum case
struct MainView: View {
@State var selectedEnum = AnEnum.anOption(AnObservedObject(string: "first"))
// @State var update = false
var body: some View {
switch selectedEnum {
case .anOption(var value):
VStack {
switch selectedEnum {
case .anOption(let val):
Text(val.string)
}
TestView(object: Binding(get: { value }, set: { value = $0 }),
callbackToVerifyChange: callback)
}
// .id(update)
}
}
func callback() {
switch selectedEnum {
case .anOption(let value):
print("Callback function shows --> \(value.string)")
// update.toggle()
}
}
}
class AnObservedObject: ObservableObject {
@Published var string: String
init(string: String) {
self.string = string
}
}
enum AnEnum {
case anOption(AnObservedObject)
}
struct TestView: View {
@Binding var object: AnObservedObject
let callbackToVerifyChange: ()->Void
var body: some View {
Text("Tap here to change the word 'first' to 'hello'")
.border(Color.black).padding()
.onTapGesture {
print("String before tapping --> \(object.string)")
object.string = "hello"
print("String after tapping --> \(object.string)")
callbackToVerifyChange()
}
}
}