Dev/iOS
[SwiftUI] @State 값 변경 감시하기
steady.dev
2021. 10. 28. 20:50
기존에는 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)
})
출처
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