我如何获得“约束力”从我的模型到我的观点?
我是Swift的新手,并且已经在遇到问题了。从我的理解来看,将应用程序分为描述数据,显示内容并允许用户输入的视图以及将用户意图转化为数据修改并允许视图相应反应的模型是一个很好的做法。
话虽如此,我着手使用该逻辑进行非常简单的应用程序。 因此,我创建了一个像这样的模型文件:
import Foundation
struct MyModel {
var testData: Double
...
}
然后是一个看起来像这样的ViewModel;
import Foundation
class MyViewModel: ObservableObject {
@Published var myModel = MyModel(testData: 0)
func setTest(_ newVal: Double) {
splitModel.testData = newVal
}
...
}
最后我的观点是:
struct ContentView: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
NavigationView {
Form {
Section {
TextField("Hello", value: viewModel.splitModel.amount, format: .currency(code: "USD"))
}
}
}
}
}
这是不起作用的,因为viewModel.splitmodel.amount
不是绑定,而是直接double。我发现修复的唯一方法就是将数据放在@State的视图中,因此,通过获得此文件结构,我正试图避免的内容。
我想对我应该实施的逻辑来解释它使它起作用,并可以纠正我对Swift的理解。 提前致谢 !
I'm fairly new to Swift and I'm already running problems. From my understanding, it is good practice to split the app into Models that describe the data, Views that display stuff and allow for user input, and ViewModels that translate the user's intents into data modification and allows the view to react accordingly.
That being said, I set out on doing a very simple app using that logic.
So I create a model file that goes like:
import Foundation
struct MyModel {
var testData: Double
...
}
then a viewModel that looks like this;
import Foundation
class MyViewModel: ObservableObject {
@Published var myModel = MyModel(testData: 0)
func setTest(_ newVal: Double) {
splitModel.testData = newVal
}
...
}
and finally my view:
struct ContentView: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
NavigationView {
Form {
Section {
TextField("Hello", value: viewModel.splitModel.amount, format: .currency(code: "USD"))
}
}
}
}
}
And this doesn't work because viewModel.splitModel.amount
isn't a Binding but a straight up Double. The only way I found to fix that is to just put the data in the view with @State, so exactly what I was trying to avoid by getting this file structure.
I would love an explanation of the logic I'm supposed to implement to make it work, and maybe get corrected about my comprehension of Swift.
Thanks in advance !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用
$
符号来参考绑定。也不使用
@obseverobject
在这里使用@stateObject
。@obseverObject
仅在视图不初始化ViewModel并注入视图时才能使用。You can use the
$
sign to refer to the binding.Also dont´t use
@ObservedObject
here use@StateObject
.@ObservedObject
should only be used if the view does not initialize the viewmodel and it is injected.