首页 > 解决方案 > 如何将对象绑定中的属性作为正常状态变量传递给子视图

问题描述

我有一个对象绑定到模型的视图。现在我想提取一个子视图。当我在子视图上定义相同的对象绑定时,一切正常。但是由于子视图是一个原始视图,我希望只有一个状态变量而不是完整的对象绑定。

不幸的是,当模型的属性发生变化时,我的子视图不会更新。

一些代码(简化):

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)
    }
}

标签: swiftui

解决方案


@State并非旨在传递任何值。事实上,Apple 建议我们将它们声明为私有,以避免犯这样的错误。

@State变量旨在用作事实的来源。如果价值来自外部,那它就不是真实的来源!我建议您观看 WWDC2019 会议:使用 SwiftUI 的数据流。

如果您的视图需要来自外部的数据,则需要通过@Binding@ObjectBinding@EnvironmentOBject


推荐阅读