【发布时间】:2021-12-13 08:22:12
【问题描述】:
我有两个不同的视图,每个视图都有一个模型来保存它们的数据。我正在尝试传递模型中一个变量的值以在另一个模型中使用,但第一个模型的值没有被传递。
第一个文件
struct Number: View {
@StateObject var model = NumberModel()
var body: some View {
NavigationView {
Form {
Section {
TextField("Enter your first number", text: $model.firstNum)
.keyboardType(.decimalPad)
}
Section {
Text("\(model.firstNum)")
}
}
}
}
}
第一个文件的模型
class NumberModel: ObservableObject {
@Published var firstNum: String
init() {
self.firstNum = ""
}
}
第二个文件
struct SecondNumber: View {
@StateObject var model = SecondNumberModel()
var body: some View {
NavigationView {
Form {
Section {
TextField("Enter your second number", text: $model.secondNum)
.keyboardType(.decimalPad)
}
Section {
Button {
model.add()
} label: {
Text("Press Me!!!")
}
}
Section {
Text("\(model.total)")
}
}
}
}
}
第二个文件的模型
class SecondNumberModel: ObservableObject {
@ObservedObject var model = NumberModel()
@Published var secondNum: String
@Published var total: Int
init() {
self.secondNum = ""
self.total = 0
}
func add() {
self.total = Int(self.secondNum + self.model.firstNum) ?? 0
}
}
这是内容视图
struct ContentView: View {
var body: some View {
TabView {
Number()
.tabItem {
Image(systemName: "circle.fill")
Text("First")
}
SecondNumber()
.tabItem {
Image(systemName: "circle.fill")
Text("Second")
}
}
}
}
我正在尝试从第一个文件中获取用户输入,然后将该号码发送到第二个文件,以便与收集的第二个号码一起添加。但是第一个数字的值不会传递到第二个文件的模型中。感谢任何帮助。谢谢。
【问题讨论】:
-
每次编写
NumberModel()时,您都会创建NumberModel的新实例。如果你想共享同一个模型,你必须在你的视图之间传递一个对同一个实例的引用。因为您的代码没有清楚地表明Number和SecondNumber在视图层次结构中是如何连接的,所以很难就如何做到这一点提出建议。您能否更新您的问题以显示两者在您的代码中的关系? -
所以目前视图没有任何相关性。我认为我需要做的就是将 numberModel 传递给 secondnumbermodel,然后在 secondnumbermodel 中使用 numberModel 中的值。我将如何传递视图的相同实例?我还要在模型中进行计算吗?
-
"我将如何传递同一个视图实例?"不是景色。您需要引用 View Model 的同一实例。为此,我们需要了解这两个视图之间的关系。
-
抱歉,我有点困惑如何显示这种关系。如果我从 Xcode 添加项目的屏幕截图会起作用吗?
-
我刚刚用视图层次结构更新了问题,显示了它们都被调用的时间。感谢您帮助我了解有关如何显示关系的更多信息。