如何将 Picker 与数据模型一起使用

How to use Picker with data model

我正在尝试 select 或者,使用来自数组的信息,但是每当我 select 一个选项 select 或者总是 returns自动到第一个位置,我怎么能在我的 $ i.anio?

中保存 selected 年份

谢谢

//---------------MODEL-----------------
struct SysNoAntpatologicosModel {
    var anio: Int
    var descripcion: String
    var idantnopat: Int
    var nombre: String
    var presente: Bool
}
//-------------ARRAY----------------
[{
    anio = 2001;
    descripcion = "test1";
    idantnopat = 38;
    nombre = Accidente;
    presente = 0;
},
{
    anio = 2002;
    descripcion = "test2";
    idantnopat = 42;
    nombre = Inmunizacion;
    presente = 0;
}
]

@State var dataSys : [SysNoAntpatologicosModel] = []

 ForEach($dataSys, id: \.idantnopat) { $i in
     HStack{
            Picker("", selection: $i.anio) {
                   ForEach(2000...2021, id: \.self) {
                           Text([=10=])
                   }
            }
            .pickerStyle(InlinePickerStyle())
            .onChange(of: i.anio) { tag in
               print("year: \(tag)")
            }
     }
 }

通过您的编辑,您已经非常接近了——您只需要在 Text 输入周围添加 "" 以便编译:

struct SysNoAntpatologicosModel {
    var anio: Int
    var descripcion: String
    var idantnopat: Int
    var nombre: String
    var presente: Bool
}

struct ContentView : View {
    @State var dataSys : [SysNoAntpatologicosModel] =
        [.init(anio: 2001, descripcion: "test1", idantnopat: 38, nombre: "Accidente", presente: false),
         .init(anio: 2002, descripcion: "test2", idantnopat: 42, nombre: "Inmunizacion", presente: false),
        ]
    
    
    var body: some View {
        ForEach($dataSys, id: \.idantnopat) { $i in
            HStack{
                Picker("", selection: $i.anio) {
                    ForEach(2000...2021, id: \.self) {
                        Text("\([=10=])") //<-- Here
                    }
                }
                .pickerStyle(InlinePickerStyle())
                .onChange(of: i.anio) { tag in
                    print("year: \(tag)")
                }
            }
        }
    }
}