SwiftUI .onAppear, hanya berjalan sekali
Aug 15 2020
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 Aug 15 2020 at 15:46
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()
}
}
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'