gpt4 book ai didi

ios - 无法向数组添加内容

转载 作者:行者123 更新时间:2023-12-01 16:19:47 26 4
gpt4 key购买 nike

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

这是我存储数组的文件:

import Foundation
import SwiftUI
import Combine

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

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

这是带有按钮+文本框的 View 和显示数组的 ScrollView :

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)
})
}
}
}
}

这是我创建的新 View ,按钮和文本字段具有完全相同的代码,但不知何故这不起作用:

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()
}
}

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

最佳答案

我假设你应该将相同的类存储从父 View 传递到工作表中,即

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 !!
})

关于ios - 无法向数组添加内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63434788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com