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()
    }
}
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'