SwiftUIピッカーにコールバックを追加しようとしていますが、実行できません。ピッカーの値が変更されても、didSetは実行されないようです。これが私がこれまでに試したことです:
struct ContentView : View {
@State private var picked: Int = 0 {didSet{print("here")}}
var someData = ["a", "b", "c"]
var body: some View {
VStack {
Picker(selection: $picked,
label: Text("")) {
ForEach(0 ..< someData.count) {Text(self.someData[$0]).tag($0)}
}
.pickerStyle(.wheel)
Text("you picked: \(someData[picked])")
}
}
}
observableObjectを使用して回避できます
import SwiftUI
class PickerModel:ObservableObject{
@Published var picked: Int = 0 {didSet{print("here")}}
}
struct Picker_Callback: View {
@ObservedObject var pickerModal = PickerModel()
var someData = ["a", "b", "c"]
var body: some View {
VStack {
Picker(selection: self.$pickerModal.picked,
label: Text("")) {
ForEach(0 ..< someData.count) {Text(self.someData[$0]).tag($0)}
}
//.pickerStyle(.wheel)
Text("you picked: \(someData[self.pickerModal.picked])")
}
}
}