【发布时间】:2021-03-29 15:27:35
【问题描述】:
我正在尝试将 Enum 与 SwiftUI 选择器一起使用,但无法让选择器更新所选值。不太确定我做错了什么。
enum WindowLayout: String, Equatable, Codable, CaseIterable, Identifiable {
case oneByOne = "1 x 1"
case oneByTwo = "1 x 2"
case oneByThree = "1 x 3"
case twoByOne = "2 x 1"
case twoByTwo = "2 x 2"
case twoByThree = "2 x 3"
case threeByOne = "3 x 1"
case threeByTwo = "3 x 2"
var id: WindowLayout {
self
}
var rows: Int {
switch self {
case .oneByOne, .oneByTwo, .oneByThree:
return 1
case .twoByOne, .twoByTwo, .twoByThree:
return 2
case .threeByOne, .threeByTwo:
return 3
}
}
var columns: Int {
switch self {
case .oneByOne, .twoByOne, .threeByOne:
return 1
case .oneByTwo, .twoByTwo, .threeByTwo :
return 2
case .oneByThree, .twoByThree :
return 3
}
}
}
struct WindowCommands: Commands {
@ObservedObject var viewModel = GridConfigViewModel(windowLayout: WindowLayout.oneByOne)
var body: some Commands {
CommandMenu("Video") {
Picker(selection: $viewModel.windowLayout, label: Text("Window Configuration")) {
ForEach(WindowLayout.allCases, id: \.id) {
Text($0.rawValue).tag($0)
}
}
}
}
}
class GridConfigViewModel: ObservableObject {
@Published public var windowLayout: WindowLayout {
didSet {
print("set \(windowLayout.rawValue)")
}
}
init(windowLayout: WindowLayout) {
self.windowLayout = windowLayout
}
}
【问题讨论】:
标签: swiftui