SwiftUI - 如何访问“WindowScene”

Lka*_*abo 2 xcode swiftui

在观看 WWDC 21 视频参考 StoreKit 2 时,他们引用了一些函数,其中他们让值 =WindowScene如下:

func manageSubscriptions() async {
    if let windowScene = self.view.window?.windowScene {
        do {
            try await AppStore.showManageSubscriptions(in: windowScene)
        } catch {
            //error
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

let 行出错并显示以下消息:Type of expression is ambiguous without more context

如果我尝试提供更多上下文,例如:

if let windowScene = (self.view.window?.windowScene)! as UIWindowScene {
Run Code Online (Sandbox Code Playgroud)

有人告诉我:Value of type 'MyStruct' has no member 'view'

我缺少什么,必须是简单的东西才能访问这个所需的 UI 元素?

谢谢

补充: 我想补充一点,我使用的是使用 SceneDelegate 和 AppDelegate 创建的 SwiftUI 应用程序,而不是简单的结构:App,结构类型。所以我猜我需要访问 SceneDelegate 中的某些内容才能获取正确的对象。

Lka*_*abo 8

只是为了给感兴趣的人提供一个答案,感谢 @aheze 找到了它,并感谢 @Matteo Pacini 提供了解决方案,让这个特定的方法在使用具有 AppDelegate/SceneDelegate 结构的 SwiftUI 应用程序时起作用,这将起作用:

@MainActor
func manageSubscriptions() async {
    if let windowScene = UIApplication.shared.connectedScenes.first {
        do {
            try await AppStore.showManageSubscriptions(in: windowScene as! UIWindowScene)
        } catch {
            //error
        }
    }
}
Run Code Online (Sandbox Code Playgroud)