SwiftUI .onAppear, hanya berjalan sekali
Di SwiftUI
aplikasi saya memiliki kode seperti ini:
var body: some View {
VStack {
Spacer()
........
}
.onAppear {
.... I want to have some code here ....
.... to run when the view appears ....
}
}
Masalah saya adalah saya ingin menjalankan beberapa kode di dalam blok .onAppear , sehingga dapat dijalankan ketika aplikasi muncul di layar, setelah diluncurkan atau setelah berada di latar belakang untuk sementara waktu. Tapi sepertinya kode ini hanya dijalankan sekali saat peluncuran aplikasi, dan tidak pernah setelahnya. Apakah saya melewatkan sesuatu? Atau haruskah saya menggunakan strategi lain untuk mendapatkan hasil yang saya inginkan?
Jawaban
5 Frankenstein
Anda harus mengamati acara ketika aplikasi sedang memasuki latar depan dan mempublikasikannya menggunakan @Published
ke ContentView
. Begini caranya:
struct ContentView: View {
@ObservedObject var observer = Observer()
var body: some View {
VStack {
Spacer()
//...
}
.onReceive(self.observer.$enteredForeground) { _ in
print("App entered foreground!") // do stuff here
}
}
}
class Observer: ObservableObject {
@Published var enteredForeground = true
init() {
if #available(iOS 13.0, *) {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIScene.willEnterForegroundNotification, object: nil)
} else {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
}
@objc func willEnterForeground() {
enteredForeground.toggle()
}
}
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'