ikeh1024のブログ

ZennやQiitaに書くにはちょっと小粒なネタをこちらに書いています

SwiftUIのToggleでget/setを利用してBinding<Bool>を渡す

image

import SwiftUI

class Manager: ObservableObject {
    @Published var lastUpdatedAt: Date = Date()
    @Published var isToggleOn = false
}

struct ContentView: View {
    
    @StateObject private var manager = Manager()
    
    var isToggleOn: Binding<Bool> {
        Binding<Bool>(
            get: { manager.isToggleOn },
            set: { newValue in
                manager.isToggleOn = newValue
                print("ここに処理を挟めるよ!")
                manager.lastUpdatedAt = .now
            }
        )
    }
    
    var body: some View {
        VStack(alignment: .leading) {
            Toggle("Toggle Button", isOn: isToggleOn)
                .toggleStyle(.switch)
            Text("Last Update: \(manager.lastUpdatedAt)")
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}