Мне нужно будет отобразить свернутое меню в SwiftUI, возможно передать одно единственное значение bool в качестве привязки var к подпредставлениям, но застряло при попытке передать это значение из словаря.
см. Код ниже :
struct MenuView: View {
@EnvironmentObject var data: APIData
@State var menuCollapsed:[String: Bool] = [:]
@State var isMenuCollapsed = false;
// I am able to pass self.$isMenuCollapsed but self.$menuCollapsed[menuItem.name], why?
var body: some View {
if data.isMenuSynced {
List() {
ForEach((data.menuList?.content)!, id: \.name) { menuItem in
TopMenuRow(dataSource: menuItem, isCollapsed: self.$isMenuCollapsed)
.onTapGesture {
if menuItem.isExtendable() {
let isCollapsed = self.menuCollapsed[menuItem.name]
self.menuCollapsed.updateValue(!(isCollapsed ?? false), forKey: menuItem.name)
} else {
print("Go to link:\(menuItem.url)")
}
}
}
}
}else {
Text("Loading...")
}
}
}
в ChildMenu Row:
struct TopMenuRow: View {
var dataSource: MenuItemData
@Binding var isCollapsed: Bool
var body: some View {
ChildView(menuItemData)
if self.isCollapsed {
//display List of child data etc
}
}
}
}
Если я использую только один единственный bool в качестве привязки var, код работает нормально, однако, если я хотел бы использовать словарь для хранения каждого состояния массива, в нем есть ошибка чего-то другого, см. изображение удара:
если я использую строку выше, это нормально.
Есть идеи, как это исправить?
Спасибо