SwiftUI .onAppear ทำงานเพียงครั้งเดียว
Aug 15 2020
ในSwiftUI
แอปฉันมีรหัสดังนี้:
var body: some View {
VStack {
Spacer()
........
}
.onAppear {
.... I want to have some code here ....
.... to run when the view appears ....
}
}
ปัญหาของฉันคือฉันต้องการเรียกใช้โค้ดภายในบล็อก. onAppearเพื่อให้มันทำงานเมื่อแอปปรากฏบนหน้าจอหลังจากเปิดตัวหรือหลังจากอยู่ในพื้นหลังสักพัก แต่ดูเหมือนว่าโค้ดนี้จะทำงานเพียงครั้งเดียวเมื่อเปิดแอปและไม่หลังจากนั้น ฉันพลาดอะไรไปรึเปล่า? หรือฉันควรใช้กลยุทธ์อื่นเพื่อให้ได้ผลลัพธ์ที่ต้องการ?
คำตอบ
5 Frankenstein Aug 15 2020 at 15:46
คุณจะต้องสังเกตเหตุการณ์เมื่อแอปเข้าสู่เบื้องหน้าและเผยแพร่โดยใช้@Published
ไฟล์ContentView
. วิธีการมีดังนี้
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()
}
}