我正在尝试为不同的相机创建一个数据库。我使用了一个结构来创建一个类型,该类型具有一些不同的变量,例如 Make、Model、Shutter Speed、crop factor ext..(尽管我已经删除了大部分以使代码更小)
我想在着陆页的列表中显示摄像头的名称,并有一张表将摄像头添加到数组中,这是我计划存储摄像头信息的地方。我一辈子都想不出如何创建一个环境对象(或类似的东西),它是一个自定义类型的数组,可以在多个不同的视图上编辑和查看。
很明显,我对编码很陌生,很难找到任何我可以轻松遵循的解决方案。也许我遗漏了一些非常明显的东西,但我只是不知道该怎么做。是否可以创建自定义类型的共享数组,或者我是不是做错了?
包括列表视图的着陆页。
import SwiftUI
struct ContentView: View {
//starts with the AddCameraView not being shown
@State private var showingSheet = false
@State public var cameraArray = [CameraStruct]()
var body: some View {
VStack{
List{
//for each camera in the array join the manufactuerer and model to create a name and dispaly it in the list
ForEach (cameraArray, id: \.id) { camera in
Text("\(camera.camManufacturer)" + " " + "\(camera.camModel)")
}
}
}
.navigationTitle("Cameras")
.toolbar{
Button{
showingSheet.toggle()
} label: {
Label("Add Camera", systemImage: "plus")
}
.sheet(isPresented: $showingSheet) {
AddCameraView()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
带有自定义表单的工作表。
import SwiftUI
struct AddCameraView: View {
//allows the sheet to close when told
@Environment(\.dismiss) var dismiss
@State public var cameraArray = [CameraStruct]()
//starts with the form being empty
@State private var camManufacturerInput = ""
@State private var camModelInput = ""
var body: some View {
NavigationView{
VStack{
//creates the form for information
Form{
Section(header: Text ("General Info")) {
TextField("Camera Manufacturer", text: $camManufacturerInput)
TextField("Camera Model", text: $camModelInput)
}
}
}
.navigationTitle("Add Camera Details")
.toolbar{
ToolbarItemGroup(placement: .navigationBarTrailing) {
Button("Save"){
//creates a variable using the new type camera struct
var camera = CameraStruct(id: UUID(), camManufacturer: camManufacturerInput, camModel: camModelInput)
//adds the camera to the first position in the array
self.cameraArray.insert(camera, at: 0)
dismiss()
}
//all text fields must be filled filled in to save
.disabled(camManufacturerInput.isEmpty || camModelInput.isEmpty)
}
}
}
}
}
struct AddCameraView_Previews: PreviewProvider {
static var previews: some View {
AddCameraView()
}
}
我正在使用的自定义结构
import Foundation
struct CameraStruct: Identifiable, Codable {
var id: UUID
var camManufacturer: String
var camModel: String
}
我已经学习了大量的在线教程,包括 StateObjects 和 EnvironmentObjects,但似乎并没有离我想去的地方更近一步。通常这会导致创建一个新类,其中已有值,而我想从一个完全空白的应用程序开始构建。