微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将某些东西添加到数组

如何解决无法将某些东西添加到数组

我在SwiftUI中制作了一个应用程序,您可以在其中创建不同的类。该应用程序将其保存在数组中。我在与显示数组的滚动视图相同的视图中有一个文本字段和一个按钮。这工作得很好,我可以轻松添加新类。现在,我使用文本字段和按钮创建了一个新视图。可以通过在导航栏中按一个按钮来查看此视图​​。它使用与另一个视图完全相同的功能,但是在另一个视图中,向该数组添加项目是可行的,在此视图中不起作用。希望您能理解我的问题并能对我有所帮助。 谢谢。

这是我存储数组的文件

import Foundation
import SwiftUI
import Combine

struct Class: Identifiable {
    var name: String
    var id = UUID()
}

class Classstore: ObservableObject {
    @Published var classes = [Class]()
}

这是带有按钮+文本字段的视图,并且滚动视图显示了数组:

import SwiftUI

struct ContentView: View {
    @State var showNewClass = false
    @Observedobject var classstore = Classstore()
    @State var newClass: String = ""
    @State var todoColor: Color = Color.pink
    
    func addNewClass() {
        classstore.classes.append(
            Class(name: newClass)
        )
        newClass = ""
    }
    
    
    var body: some View {
        NavigationView {
            vstack {
                HStack {
                    TextField("New Todo",text: $newClass)
                    Image(systemName: "app.fill")
                        .foregroundColor(Color.pink)
                        .padding(.horizontal,3)
                    Image(systemName: "books.vertical")
                        .padding(.horizontal,3)
                    if newClass == "" {
                        Text("Add!")
                            .foregroundColor(Color.gray)
                    } else {
                        Button(action: {
                            addNewClass()
                        }) {
                            Text("Add!")
                        }
                    }
                }.padding()
                ScrollView {
                    ForEach(self.classstore.classes) { name in
                        Text(name.name)
                    }
                }
                .navigationBarTitle(Text("Schulnoten"))
                .navigationBarItems(trailing:
                Button(action: {
                    self.showNewClass.toggle()
                }) {
                    Text("New Class")
                }
                .sheet(isPresented: $showNewClass) {
                    NewClass(isPresented: $showNewClass)
                })
            }
        }
    }
}

这是我创建的新视图,按钮和文本字段具有完全相同的代码,但是以某种方式不起作用:

import SwiftUI

struct NewClass: View {
    @Binding var isPresented: Bool
    @State var className: String = ""
    @Observedobject var classstore = Classstore()
    
    func addNewClass() {
        classstore.classes.append(
            Class(name: className)
        )
    }
    
    var body: some View {
        vstack {
            HStack {
                Text("New Class")
                    .font(.title)
                    .fontWeight(.semibold)
                Spacer()
            }
            TextField("Name of the class",text: $className)
                .padding()
                .background(Color.gray)
                .cornerRadius(5)
                .padding(.vertical)
            Button(action: {
                addNewClass()
                self.isPresented.toggle()
            }) {
                HStack {
                    Text("Safe")
                        .foregroundColor(Color.white)
                        .fontWeight(.bold)
                        .font(.system(size: 20))
                }
                .padding()
                .frame(width: 380,height: 60)
                .background(Color.blue)
                .cornerRadius(5)
            }
            Spacer()
        }.padding()
    }
}

对不起,如果我的英语不好。我不是母语人士。

解决方法

我假设您应该将相同的类存储区从父视图传递到表单中,即

struct NewClass: View {
    @Binding var isPresented: Bool
    @State var className: String = ""
    @ObservedObject var classStore: ClassStore   // << expect external

ContentView

.sheet(isPresented: $showNewClass) {
    NewClass(isPresented: $showNewClass,classStore: self.classStore) // << here !!
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。