ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
SwiftUI View struct ကို UIKit ရဲ့ Activity/ViewController lifecycle (`onCreate`, `onResume` စသည်) လိုမျိုး callback အများကြီး မရှိပါ — `onAppear { }` (View screen ပေါ်မှာ ပေါ်လာတိုင်း run) နဲ့ `onDisappear { }` (View screen ကနေ ကွယ်သွားတိုင်း run) ဆိုတဲ့ modifier ၂ ခုက အသုံးအများဆုံးပါ — data fetch (API call) ကို `onAppear` ထဲမှာ trigger လေ့ရှိပါတယ်.
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
`WeatherScreen` ကို `.onAppear { viewModel.fetchWeather() }` လို့ ရေးထားရင် — user က ဒီ screen ဆီ ရောက်လာတိုင်း weather data ကို automatic fetch လုပ်ပေးပါလိမ့်မယ် — screen ကနေ ထွက်သွားချိန် ongoing network task ကို cancel လုပ်ချင်ရင် `.onDisappear { viewModel.cancelFetch() }` ကို ထည့်နိုင်ပါတယ်.
အတူတူ ကြည့်မယ်
struct WeatherScreen: View {
@State private var weather: WeatherResponse?
var body: some View {
VStack {
if let weather {
Text("\(weather.tempCelsius)°C")
} else {
ProgressView()
}
}
.onAppear {
Task {
weather = try? await fetchWeather(city: "Yangon")
}
}
}
}Screen ဆီ ရောက်လာတိုင်း loading spinner ပြီးရင် weather data ကို automatic fetch/display လုပ်တာ တွေ့ရမည်။၅ မိနစ် စမ်းကြည့်
`WeatherScreen` ကို run ကြည့်ပြီး, `onAppear` ထဲက fetch logic ကို `print("appeared")` ရေးထား test ကြည့်ပါ — screen ဆီ ပြန်ရောက်တိုင်း console ထဲ 'appeared' ပြန်ပေါ်လာတာ confirm လုပ်ကြည့်ပါ။
သတိလေးတစ်ချက်
`onAppear` က View ကို 'ပထမဆုံးအကြိမ် create' တာနဲ့ မတူပါ — NavigationStack ထဲမှာ screen ကို ဝင်/ထွက်တိုင်း `onAppear` ထပ်ခါထပ်ခါ trigger ဖြစ်နိုင်ကြောင်း သတိထားပါ။