SwiftUI中的widgetURL

问题描述

我们到底需要在.widgetURL()中指定哪个URL?

在Widget代码的WWDC会话中,他们使用了.widgetURL(entry.character.url)。这里entry.character.url是URL(string: "game:///egghead")!

请解释一下我们需要通过此处(widgetURL())才能到达特定APP视图的URL吗?

解决方法

该网址的格式为scheme:// someAction

存在过分简化的风险,该方案通常是您应用程序的名称。这是您确认网址适合您的应用的方式

在小部件主体中,您使用widgetURL修饰符:

var body: some View {
        content().widgetURL("myApp://someAction")
}

然后在您的应用程序中,使用onOpenURL修饰符来获取url,检查其是否适合您的应用程序并对其进行解析以确定该怎么做。 someAction是您向应用发送的消息,告诉它该怎么做

 var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    guard url.scheme == "myApp" else { return }
                    print(url) // parse the url to get someAction to determine what the app needs do
                }
        }
    }

我通常将URL的格式设置为myApp:// someAction / parms,以便我可以解析该URL以确定应用程序需要执行的操作,还可以将其传递给一些parms。有些人喜欢通过使用URLComponents正确地形成URL(路径,queryItems等)来完成此操作。这可能是最佳做法。