SwiftUI .onAppear, 한 번만 실행
Aug 15 2020
A의 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()
}
}