How can I trigger an action when a swiftUI toggle() is toggled? How can I trigger an action when a swiftUI toggle() is toggled? swift swift

How can I trigger an action when a swiftUI toggle() is toggled?


SwiftUI 2

If you're using SwiftUI 2 / iOS 14 you can use onChange:

struct ContentView: View {    @State private var isDisplayed = false        var body: some View {        Toggle("", isOn: $isDisplayed)            .onChange(of: isDisplayed) { value in                // action...                print(value)            }    }}


Here is a version without using tapGesture.

@State private var isDisplayed = falseToggle("", isOn: $isDisplayed)   .onReceive([self.isDisplayed].publisher.first()) { (value) in        print("New value is: \(value)")              }


iOS13+

Here is a more generic approach you can apply to any Binding for almost all built in Views like Pickers, Textfields, Toggle..

extension Binding {    func didSet(execute: @escaping (Value) -> Void) -> Binding {        return Binding(            get: { self.wrappedValue },            set: {                self.wrappedValue = $0                execute($0)            }        )    }}

And usage is simply;

@State var isOn: Bool = falseToggle("Title", isOn: $isOn.didSet { (state) in   print(state)})

iOS14+

@State private var isOn = falsevar body: some View {    Toggle("Title", isOn: $isOn)        .onChange(of: isOn) { _isOn in            /// use _isOn here..        }}