【发布时间】:2021-02-09 22:31:23
【问题描述】:
在我的 macOS 应用程序项目中,我有一个 NavigationLinks 的 SwiftUI 列表视图,它使用来自项目数组的 foreach 循环构建:
struct MenuView: View {
@EnvironmentObject var settings: UserSettings
var body: some View {
List(selection: $settings.selectedWeek) {
ForEach(settings.weeks) { week in
NavigationLink(
destination: WeekView(week: week)
.environmentObject(settings)
tag: week,
selection: $settings.selectedWeek)
{
Image(systemName: "circle")
Text("\(week.name)")
}
}
.onDelete { set in
settings.weeks.remove(atOffsets: set)
}
.onMove { set, i in
settings.weeks.move(fromOffsets: set, toOffset: i)
}
}
.navigationTitle("Weekplans")
.listStyle(SidebarListStyle())
}
}
此视图为整体 NavigationView 创建侧边栏菜单。
在这个列表视图中,我想将选择机制与来自 NavigationLink 的标签一起使用。 Week 是一个自定义模型类:
struct Week: Identifiable, Hashable, Equatable {
var id = UUID()
var days: [Day] = []
var name: String
}
UserSettings 看起来像这样:
class UserSettings: ObservableObject {
@Published var weeks: [Week] = [
Week(name: "test week 1"),
Week(name: "foobar"),
Week(name: "hello world")
]
@Published var selectedWeek: Week? = UserDefaults.standard.object(forKey: "week.selected") as? Week {
didSet {
var a = oldValue
var b = selectedWeek
UserDefaults.standard.set(selectedWeek, forKey: "week.selected")
}
}
}
我的目标是将列表选择中的值直接存储在 UserDefaults 中。 didSet 属性被执行,但变量始终为零。由于某种原因,所选列表值无法存储在已发布/可绑定变量中。 为什么 $settings.selectedWeek 总是为零?
【问题讨论】: