Arrays SwiftUI-如何创建从属性中选择值的选择器?

Arrays SwiftUI-如何创建从属性中选择值的选择器?,arrays,properties,swiftui,picker,Arrays,Properties,Swiftui,Picker,我有这两种型号,第一种: import SwiftUI import Combine class FolderModel : Codable, Identifiable, Equatable, ObservableObject { var id = UUID() var folderName : String var values : [ValueModel] = [] init(folderName: String) { self

我有这两种型号,第一种:

import SwiftUI
import Combine

class FolderModel : Codable, Identifiable, Equatable, ObservableObject  {

    var id = UUID()
    var folderName : String
    var values : [ValueModel] = []
    
    init(folderName: String) {
        self.folderName = folderName
    }
}
第二个:

import SwiftUI
import Combine

class ValueModel : Codable, Identifiable, Equatable, ObservableObject, Comparable {

    var id = UUID()
    var name : String
    var notes : String?
    var expires : Date?
    
    init(name: String, notes: String?, expires: Date?) {
        self.name = name
        self.notes = notes
        self.expires = expires
    }
}
这些仓库:

import SwiftUI
import Combine

class DataManager : Equatable, Identifiable, ObservableObject {


static let shared = DataManager()

@Published var storageValues : [ValueModel] = []
typealias StorageValues = [ValueModel]


@Published var storageFolder : [FolderModel] = []
typealias StorageFolder = [FolderModel]

//The rest of the code
}
然后我有一个值的详细视图,它显示了他的所有属性。从这里,我想选择用户希望将其放入的文件夹(在代码中转换为将该值附加到FolderModel的数组“values”中)。 为此,我尝试创建一个选择器,以显示所有文件夹(按名称)并可选择,这样当我按“保存”时,我可以执行类似“selectedFolder.append(value)”的操作。我尝试创建的选择器如下所示:

import SwiftUI
struct DetailValueView: View {

@ObservedObject var dm : DataManager
@State private var selector = 0
@State var selectedFolder : FolderModel?

    var body: some View {
        Form {
            Section(header: Text("Properties")) {
                folderCell
                if hasFolder == true {
                picker
                }
            }
        }
    }

var folderCell : some View {
    VStack {
        Toggle(isOn: $hasFolder) {
            if hasFolder == true {
                VStack(alignment: .leading) {
                    Text("Folder: " + "//Here I would like to display the selected value")
                }
            } else if hasFolder == false {
                Text("Folder")
            }
        }
   }
}

var picker : some View {
    Picker(selection: $selector, label: Text("Select Folder")) {
        ForEach(dm.storageFolder) { foldersForEach in
              Button(action: {
                  selectedFolder = foldersForEach
              }, label: {
                  Text(foldersForEach.folderName)
              })
        }
    }.pickerStyle(DefaultPickerStyle())
}
我试图在网上找到一个解决方案,但我真的不知道选择器是如何工作的,我不知道如何使用“@State private var selector=0”来获得我想要的值。
谢谢所有帮助我的人

这里需要强调两件事:首先,您需要在NavigationView中包装表单,或者将选择器样式更改为
WheelPickerStyle
。否则选择器将无法工作(有关详细说明,请参阅)。其次,您的状态选择器是integer类型。所以也要确保循环使用整数。现在,您的状态选择器将保存文件夹列表中选定文件夹的索引

请参见下面我的工作示例:

struct ContentView:View{
@ObservedObject变量dm:DataManager
@状态-私有变量选择器=0
@State private var hasFolder=false
var body:一些观点{
导航视图{
形式{
节(标题:文本(“属性”)){
折叠电池
如果!dm.storageFolder.isEmpty{
采摘者
}
}
}
}
}
var folderCell:一些视图{
VStack{
切换(文件夹){
如果hasFolder==true{
VStack(对齐:。前导){
文本(“文件夹:\(dm.storageFolder[selector].folderName)”)
}
}如果hasFolder==false,则为else{
文本(“文件夹”)
}
}
}
}
var选择器:一些视图{
选择器(选择:$选择器,标签:文本(“选择文件夹”)){
ForEach(0..
什么是ValueModel?对不起,我忘了粘贴ValueModel的代码。我修正了它,我编辑了问题