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