web-dev-qa-db-fra.com

Ajout d'un rappel à un sélecteur SwiftUI

J'essaie d'ajouter un rappel à un sélecteur SwiftUI mais je n'arrive pas à l'exécuter. Le didSet ne s'exécute apparemment pas lorsque la valeur du sélecteur change. Voici ce que j'ai essayé jusqu'à présent:

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

vous pouvez utiliser ObservableObject pour le contourner


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