SwiftUi ViewModel未初始化所有存储的属性
我试图将数据传递到ViewModel,并得到“从初始值设定项返回,而不初始化所有存储的属性” 在ViewModel中init(entry:entry)之后执行的任何操作都会出错 我首先从MainView传入数据,如下所示:SwiftUi ViewModel未初始化所有存储的属性,swiftui,Swiftui,我试图将数据传递到ViewModel,并得到“从初始值设定项返回,而不初始化所有存储的属性” 在ViewModel中init(entry:entry)之后执行的任何操作都会出错 我首先从MainView传入数据,如下所示: struct MainView: View { @State var entry = Entry() // inputting the data TextField("Beg Value", text: self.$entry.
struct MainView: View {
@State var entry = Entry()
// inputting the data
TextField("Beg Value", text: self.$entry.a)
// passing to next view
NavigationLink(
destination: ShowView( entry: entry ),
label: {Image(systemName: "arrow.clockwise") })
}
这是获取数据的视图
struct ShowView: View {
var entry: Entry
@ObservedObject var showVM: ShowViewModel
init( entry:Entry ) {
self.entry = entry
self.showVM = ShowViewModel( entry: entry )
}
}
以及初始化数据后得到错误的ViewModel。我试过很多变体
class ShowViewModel: ObservableObject {
var entry: Entry
init(entry: Entry) {
self.entry = entry
}
init(){
print("here") \\ Return from initializer without initializing all stored properties
}
}
和入口结构。我也试过作为一个班级
struct Entry {
var month: Date = Date()
var a:String = "1"
var b:String = "2"
var c:String = "3"
var d:String = "4"
var e:String = "5"
var f: String = ""
}
谢谢。删除second
init
并使用默认值创建一个(如果参数中未提供,则使用),如
这是工作代码 我猜你忘了在主视图中添加NavigationView,所以主体不见了 此外,您可以使用@Binding代替@ObservedObject
struct Entry {
var month: Date = Date()
var a:String = "1"
var b:String = "2"
var c:String = "3"
var d:String = "4"
var e:String = "5"
var f: String = ""
}
class ShowViewModel: ObservableObject {
var entry: Entry
init(entry: Entry) {
self.entry = entry
}
}
struct ShowView: View {
@ObservedObject var showVM: ShowViewModel
init( entry:Entry ) {
self.showVM = ShowViewModel( entry: entry )
}
var body: some View {
Text(showVM.entry.a)
}
}
struct MainView: View {
@State var entry = Entry()
var body: some View{
NavigationView{
VStack {
// inputting the data
TextField("Beg Value", text: self.$entry.a)
.textFieldStyle(RoundedBorderTextFieldStyle())
// passing to next view
NavigationLink(
destination: ShowView( entry: entry ),
label: {Image(systemName: "arrow.clockwise") })
}.padding()
}
}
}
在这之后我什么都做不了。你什么意思?在你无法编译之前。很可能您需要添加
@Published
(正如您声明的类observeObject)如果不使用第二个init,为什么需要第二个init?
struct Entry {
var month: Date = Date()
var a:String = "1"
var b:String = "2"
var c:String = "3"
var d:String = "4"
var e:String = "5"
var f: String = ""
}
class ShowViewModel: ObservableObject {
var entry: Entry
init(entry: Entry) {
self.entry = entry
}
}
struct ShowView: View {
@ObservedObject var showVM: ShowViewModel
init( entry:Entry ) {
self.showVM = ShowViewModel( entry: entry )
}
var body: some View {
Text(showVM.entry.a)
}
}
struct MainView: View {
@State var entry = Entry()
var body: some View{
NavigationView{
VStack {
// inputting the data
TextField("Beg Value", text: self.$entry.a)
.textFieldStyle(RoundedBorderTextFieldStyle())
// passing to next view
NavigationLink(
destination: ShowView( entry: entry ),
label: {Image(systemName: "arrow.clockwise") })
}.padding()
}
}
}