web-dev-qa-db-ja.com

SwiftUI Pickerにコールバックを追加する

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])")
        }
    }
}
7
slicerdicer

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])")
        }
    }
}

0
springday