【发布时间】:2020-07-10 19:11:25
【问题描述】:
我需要在 SwiftUI 中显示一个折叠菜单,可以将一个布尔值作为绑定 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...")
}
}
}
在子菜单行中:
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
}
}
}
}
如果我只使用一个布尔值作为绑定变量,则代码运行正常,但是,如果我想使用字典来存储数组的每个状态,则会出现其他错误,请参阅图像吹:
如果我使用上面的行,那很好。
知道如何解决它吗?
谢谢
【问题讨论】:
-
Dictionary 不是 RandomAccessCollection,因此在 ForEach 和 Binding 中不受支持,请使用包含 title 和 selected(据我了解)属性的 MenuItem 结构数组的视图模型。不要撞墙——换个思路。 =)