我有一个带有绑定到模型的对象的视图。现在我要提取一个子视图。当我在子视图上定义相同的对象绑定时,一切正常。但是由于子视图是原始视图,因此我只希望有一个状态变量,而不是完整的对象绑定。
不幸的是,当模型的属性更改时,我的子视图不会更新。
某些代码(简体):
private struct ControlButtons : View {
@ObjectBinding var timerViewModel: TimerViewModel
var body: some View {
JumpBackButton(isDisabled: timerViewModel.isAtStart, jumpAction: { self.timerViewModel.jumpBack() })
}
}
struct JumpBackButton: View {
@State var isDisabled = false
var jumpAction: () -> Void
var body: some View {
Button(action: { self.jumpAction() }) {
Image(systemName: "backward.end")
}.buttonStyle(.plain).padding().disabled(isDisabled)
}
}
答案 0 :(得分:0)
@State
不能传递任何值。实际上,Apple建议我们将它们声明为私有,以避免犯这样的错误。
@State
变量旨在用作真理的来源。如果价值来自外部,那不是真理的源头!我建议您观看WWDC2019会话:SwiftUI的数据流。
如果您的视图需要外部数据,则需要通过@Binding
,@ObjectBinding
或@EnvironmentOBject
指向它