首页 > 解决方案 > 从一个属性中提取价值到另一个属性中

问题描述

我将我的@ObservableObject 传递给子视图。由于并非每个子组件都需要来自@ObservableObject 的所有值,因此我想将某些值提取到变量中,然后将这些值用于向用户显示 UI。

想象一下我有一个数据类。

class Data: ObservableObject {
    @Published var imageName: String
    @Published var label: String
    @Published var value: String

    init(imageName: String, label: String, value: String) {
        self.imageName = imageName
        self.label = label
        self.value = value
    }
}

现在,这就是我想要实现的目标:

struct SubView: View {
    @ObservedObject var data: Data

    @State var foo = data.value

    var body: some View {
        ZStack {
            Text(foo)
        }
    }
}

每当我尝试这样做时,编译器都会抱怨以下内容:

不能在属性初始化器中使用实例成员“数据”;属性初始化程序在“自我”可用之前运行

我需要 foo 属性来拥有@State,因为它应该是一个需要倒数到零的值。有没有办法可以绕过这个并且仍然使用该值来倒计时?

标签: swiftswiftui

解决方案


要访问该值,只需使用data.value. 您的视图代码将如下所示:

struct SubView: View {
    @ObservedObject var data: Data

    var body: some View {
        ZStack {
            Text(data.value)
        }
    }
}

但是,如果您需要获取 的Bindingdata.value,您可以使用$data.value. 例子:

TextField("Data value", text: $data.value)

推荐阅读