본문 바로가기
Dev/iOS

[SwiftUI] @State 값 변경 감시하기

by steady.dev 2021. 10. 28.

기존에는 Toggle, Text Filed, Picker와 같은 기본 제공하는 View에서 Binding 값들이 변경되는 것을 탐지 할 수 없었다.

 

iOS 14에서는 다음과 같은 함수를 제공해주고 있어서 이를 활용하면 된다.

@State private var isOn = false

var body: some View {
    Toggle("제목", isOn: $isOn)
        .onChange(of: isOn) { value in
            print("\(value)")
        }
}

iOS13+

iOS 13에서는 onChange 함수가 없기 때문에 Binding 을 확장해서 사용하면 된다.

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

사용시

@State var isOn: Bool = false

Toggle("제목", isOn: $isOn.didSet { (state) in
   print(state)
})

 

 

출처

https://stackoverflow.com/questions/56996272/how-can-i-trigger-an-action-when-a-swiftui-toggle-is-toggled

 

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

In my SwiftUI view I have to trigger an action when a Toggle() changes its state. The toggle itself only takes a Binding. I therefore tried to trigger the action in the didSet of the @State variabl...

stackoverflow.com

 

댓글