修改swiftui数组值

Posted

技术标签:

【中文标题】修改swiftui数组值【英文标题】:modify swiftui array value 【发布时间】:2021-09-21 19:33:03 【问题描述】:

我正在制作一个应用程序,它通过请求显示列表,我想要的是制作可折叠的内容,这是我的代码。

 @State var dataSys : [SysAntpatologicosModel] = []
    @State var dataUser : [UsrAntpatologicosModel] = []

 ForEach(self.dataSys, id: \.idantpat)
                            i in
                            HStack
                                //MARK: NOMBRE PATOLOGIA1
                                Text(i.nombre)//"pa1Tittle"
                                    .modifier(Fonts(fontName: .bold,size: 14))
                                    .foregroundColor(Color("blackColor"))
                                    .fixedSize(horizontal: false, vertical: true)
                                    .frame(maxWidth: .infinity, alignment: .leading)
                                Button(action: 
                                    i.presente.toggle()
                                ) 
                                    Image(systemName: "chevron.down")
                                        .foregroundColor(Color("grayColor"))
                                    
                            
                            
                            if i.presente == true 
                                //MARK: FECHA PATOLOGIA 1
                                DatePicker(selection: self.$datePat, in: Date()..., displayedComponents: .date)
                                    Text("pa2Tittle")
                                        .modifier(Fonts(fontName: .bold,size: 14))
                                        .foregroundColor(Color("blackColor"))
                                        .fixedSize(horizontal: false, vertical: true)
                                        .frame(maxWidth: .infinity, alignment: .leading)
                                    
                                    .datePickerStyle(DefaultDatePickerStyle())
                                    .autocapitalization(.none)
                                    .padding(8)
                                    .foregroundColor(Color("blackColor"))
                                    .overlay(RoundedRectangle(cornerRadius: 40).stroke(Color("grayColor"), lineWidth: 1)).background(RoundedRectangle(cornerRadius: 40).fill(Color("whiteColor")))


错误是:不能在不可变值上使用变异成员:'data1' is a 'let' constant

我想为数组的每次迭代对我的布尔变量做一个 .toggle(),如何更新数组的值 ?

【问题讨论】:

观看 WWDC 21 揭秘 SwiftUI @loremipsum 谢谢! 【参考方案1】:

您可以使用新的element binding syntax。需要 Xcode 13。简单来说,它允许您将Binding 传递给您的ForEach,然后您可以获得每个元素的Binding

从此更改您的ForEach

ForEach(dataSys, id: \.idantpat)  i in

到这里:

ForEach($dataSys, id: \.idantpat)  $i in

其余代码保持不变。

由于$i 代表Binding,所以常规的i 变量可以用作普通变量。这类似于在您的视图中使用@State@Binding 时,您有一个常规变量和一个$-prefixed 变量。

这解决了您的问题,因为 i 否则将只是一个常量。

近期类似回答here.

【讨论】:

谢谢!我不得不更新 xcode 13 并且它工作了

以上是关于修改swiftui数组值的主要内容,如果未能解决你的问题,请参考以下文章

在 Swiftui 示例中修改 isFavourite 值

SwiftUI:在数组中更新值后视图没有改变

检查 JSON 数组中是不是存在值,如果不存在则检查下一个数组(Swift / SwiftUI)

如何使用 SwiftUI 将值数组写入 Firestore

如何修改PKDrawing中的个别笔画? - PencilKit / SwiftUI

在 SwiftUI 中更新/编辑数组元素的最佳方法