修改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数组值的主要内容,如果未能解决你的问题,请参考以下文章
检查 JSON 数组中是不是存在值,如果不存在则检查下一个数组(Swift / SwiftUI)