SwiftUI .onAppear, hanya berjalan sekali
Aug 15 2020
Di SwiftUIaplikasi 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 Aug 15 2020 at 15:46
Anda harus mengamati acara ketika aplikasi sedang memasuki latar depan dan mempublikasikannya menggunakan @Publishedke 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()
}
}
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'