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的代码。我修正了它,我编辑了问题