从SceneDelegate更新屏幕结构的状态

时间:2020-02-12 07:55:24

标签: ios swift iphone swiftui

我来自Swift和SwiftUI的本机和初学者,我很好奇当应用程序回到前台时如何在特定屏幕上执行操作和更新状态。我想检查通知的状态(“允许”,“被拒绝”等)并更新UI。

这是一些示例代码-这是我要更新的视图:

struct Test: View {
    @State var isNotificationsEnabled : Bool

    var body : some View {
        Toggle(isOn: self.isNotificationsEnabled) {
            Text("Notifications")
        }
    }

}

到目前为止,我一直在阅读的内容是您需要在func sceneWillEnterForeground(_ scene: UIScene)内编辑SceneDelegate.swift,但是究竟如何从那里更新Test结构的状态?我在想我们需要某种全球状态,但这只是一个猜测。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这是最简单的方法

struct Test: View {
    @State private var isNotificationsEnabled : Bool

    private let foregroundPublisher = NotificationCenter.default.publisher(for: UIScene.willEnterForegroundNotification)

    var body : some View {
        Toggle(isOn: self.$isNotificationsEnabled) {
            Text("Notifications")
        }
        .onReceive(foregroundPublisher) { notification in
            // do anything needed here
        }
    }
}

当然,如果您的应用程序可以有多个场景,并且您需要以某种方式区分它们,那么将需要这种方法的更复杂的变体来区分哪个场景生成此通知。