뷰가 화면에 나타날 때 실행되는 Modifier입니다. 네트워크 요청, 데이터 로드, 초기화 작업 등에 활용할 수 있습니다.
struct ContentView: View {
var body: some View {
Text("Hello, SwiftUI!")
.onAppear {
print("View appeared!")
}
}
}
뷰가 화면에서 사라질 때 실행되는 Modifier입니다. 리소스 정리, 타이머 정지 등에 사용할 수 있습니다.
struct ContentView: View {
var body: some View {
Text("Goodbye, SwiftUI!")
.onDisappear {
print("View disappeared!")
}
}
}
지정한 값이 변경될 때 실행되는 Modifier입니다. 상태 값이 변경될 때 특정 작업을 수행할 때 유용합니다.
struct ContentView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Count: \(count)")
Button("Increment") {
count += 1
}
}
.onChange(of: count) { newValue in
print("Count changed to: \(newValue)")
}
}
}
| 특징 | .onChange | .onReceive |
|---|---|---|
| 트리거 | 특정 값(State, Binding 등)이 변경될 때 실행 | Combine의 Publisher를 구독하고 값이 변경될 때 실행 |
| 사용 예시 | @State 변수가 변경될 때 이벤트 실행 | Timer, NotificationCenter, Custom Publisher 값 변경 감지 |
| 실행 주기 | 값이 변경될 때 한 번 실행 | Publisher가 새로운 값을 방출할 때마다 실행 |
| 주요 차이점 | SwiftUI 상태 변화 감지 | 외부 이벤트 기반 업데이트 |
Combine의 Publisher를 구독하여 값이 변경될 때 실행되는 Modifier입니다. 타이머, 알림센터(NotificationCenter) 등의 이벤트를 처리할 때 사용할 수 있습니다.
import Combine
struct ContentView: View {
let timer = Timer.publish(every: 1.0, on: .main, in: .common).autoconnect()
@State private var timeElapsed = 0
var body: some View {
Text("Time: \(timeElapsed)")
.onReceive(timer) { _ in
timeElapsed += 1
}
}
}