The following picker isn't updating $selection
. Regardless of what the Picker shows while running the app, selection.rawValue
always returns 0
.
What is preventing the Picker from updating the State variable selection
?
import SwiftUI
struct OrderPicker: View {
let initialIndex: Int
@State private var selection: Index
enum Index: Int, CaseIterable, Identifiable {
case none = 0,
first = 1,
second = 2,
third = 3
var id: Self { self }
}
init(initialIndex: Int) {
self.initialIndex = initialIndex
_selection = State(initialValue: OrderPicker.Index(rawValue: initialIndex) ?? .none)
}
var body: some View {
Form {
Picker("Order in list", selection: $selection) {
ForEach(Index.allCases) { index in
Text(String(describing: index)).tag(index)
}
}
}
.frame(height: 116)
}
func getOrderIndex() -> Int {
let index = selection.rawValue
return index
}
}
selection
. You can verify this by adding.onChange(of: selection) { print($0) }
to the end of yourForm
. However, the presence ofgetOrderIndex
, which is unused in your current code, makes me wonder if you're trying to do something like reach into a child view to see it's state from the parent view or something like that.selection
in a parent class by exposing it withgetOrderIndex
. WillgetOrderIndex
not accurately returnselection
's rawValue?