【发布时间】:2021-03-28 15:44:16
【问题描述】:
我无法根据文章使用 EquatableView:Link1 和 link2。我希望每次单击按钮时都会调用 TestView 中的“==”函数。
我错过了什么吗?
struct ContentView: View {
@State var state = false
var body: some View {
VStack {
EquatableView(content: TestView(state: $state))
Button("Change state", action: {state.toggle()})
}
}
}
struct TestView: View, Equatable {
@Binding var state: Bool
var body: some View {
let _ = print("Test updated")
Text("TestView state : \(state.description)")
}
static func == (lhs: TestView, rhs: TestView) -> Bool {
//Never printed or invoked
let _ = print ("lhs == rhs invoked \(lhs.state) == \(rhs.state)")
return lhs.state == rhs.state
}
}
更新:
在得到 Alperen 非常有用的回复后,它表明必须添加“@State”才能触发 ==。但是,如下所示,将父级的“@State” var 直接传递给同一 var 的 SubView 的“@State”是没有意义的。
所以,我在 TestView 中添加了另一个变量“@State var notUsed”,这将不起作用除非“@Binding”被删除。还想比较“@Binding”变量,所以对我来说这是不合逻辑的。
我的问题仍然存在,是我遗漏了什么还是这种行为是设计使然?
【问题讨论】:
标签: swift xcode view swiftui state