Dev-iOS/SwiftUI

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

lafortune 2023. 7. 5. 08:37
반응형

기존에는 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)")
        }
}

 


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)
})
 
반응형