如果不使用 SwiftUI Lifecycle,则无法将 Scene 方法用于 URL、NSUserActivity 和其他外部事件

jls*_*ert 5 swiftui

我正在使用新的“纯”SwiftUIAppScene结构而不是AppDelegate.

我的一些视图接受自定义 url 方案和使用onOpenURL(perform:). 一切都按预期工作。

但是,从 Beta 6 开始,Xcodes 给出以下运行时警告:

运行时:SwiftUI:不能在不使用 SwiftUI 生命周期的情况下对 URL、NSUserActivity 和其他外部事件使用场景方法。如果没有 SwiftUI Lifecycle,广告和处理外部事件会浪费资源,并且会产生不可预测的结果。

我到底做错了什么?什么是SwiftUI生命周期指什么?


这就是我的主要App结构的样子。我将一些默认修饰符附加到主视图。

@main
struct MyApp: App {
    @StateObject var viewModel = GlobalViewModel()
    
    var body: some Scene {
        WindowGroup {
            MainView()
                .applyingDefaultColors()
                .environmentObject(viewModel)
                .environmentObject(TranslationProvider())
                .toggleStyle(SwitchToggleStyle(tint: .accentColor))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

JuJ*_*oDi 0

SwiftUI 生命周期是指渲染为场景子级WindowGroup的视图,即通常在应用程序主体中返回的结构。

这基本上意味着,如果您将“辅助”视图附加到场景,例如 MacOS 的命令,它们将无法使用类似的方法.onContinuedUserActivity,并且会产生此错误。在这些情况下,通信视图状态更改应使用 FocusedValues,其中订阅视图具有 或@FocusedBinding@FocusedValue发布视图注入.focusedValue(\.someKeyPath, $interestingState)