SwiftUI .onAppear, yalnızca bir kez çalışıyor
Bir SwiftUI
uygulamada şöyle bir kodum var:
var body: some View {
VStack {
Spacer()
........
}
.onAppear {
.... I want to have some code here ....
.... to run when the view appears ....
}
}
Benim sorunum, .onAppear bloğunun içinde bazı kodları çalıştırmak istiyorum , böylece uygulama ekranda göründüğünde, başlatıldıktan sonra veya bir süre arka planda kaldıktan sonra çalıştırılır. Ancak görünen o ki bu kod, uygulama başlangıcında bir kez çalıştırılıyor ve daha sonra asla çalıştırılmıyor. Bir şey mi kaçırıyorum? Yoksa istediğim sonucu elde etmek için farklı bir strateji mi kullanmalıyım?
Yanıtlar
5 Frankenstein
Sen app ön plan girerken olayı gözlemlemek ve kullanma yayınlamak zorunda kalacak @Published
için ContentView
. Bunu nasıl yapacağınız aşağıda açıklanmıştır:
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()
}
}
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı