如何使用WidgetKit中的Link来定义任意区域,而不仅仅是文本链接?

问题描述

在WWDC 2020的“第2部分中的小部件代码”会话中,the presenter says

小部件没有动画或自定义交互,但是我们可以从小部件到应用程序进行深层链接。 SystemSmall小部件是一个较大的点击区域,而systemMedium和systemLarge可以使用新的SwiftUI链接API在小部件内创建可点击区域。

这表明我应该能够将窗口小部件的区域指定为可轻触的区域,从而导致应用程序中具有给定的URL。但是Link API仅带有字符串标题和目标URL-它似乎无法嵌入图像等其他任意视图。

如何使用Link API将小部件的区域指定为可轻敲,而不仅仅是文本链接

解决方法

Link的类型定义实际上是struct Link<Label> where Label : View,因此对Label的唯一约束是它符合View协议(尽管名称另有说明)。我首选的初始化器是init(destination:,label:),因此您可以像这样将每个视图嵌入视图构建器中:

Link(destination: URL(string: "some://dest")!) {
  HStack {
    Text("I'm part of the tappable area")
    Text("Me too")
  }
}

您实际上可以在Apple的Emoji Rangers项目中看到这一点(检查AllCharactersView.swift