如何创建在应用程序进程中运行的AppIntent,并在你的小部件Button中使用它?我创建了一个新文件,将其添加到我的应用程序的目标中,创建了AppIntent struct ,然后向我的小部件添加了一个按钮:Button(intent: TestIntent()) { Text("Test") }.这会导致编译时错误Cannot find 'TestIntent' in scope,这是有意义的,因为这段代码不存在于我试图使用它的小部件扩展中.但为窗口小部件增加互动性的documentation个选项如下:

对于小部件,创建一个采用AppIntent协议的新 struct 并将其添加到您的应用程序目标中……在协议所需的Perform()函数中,添加小部件可以使用的操作代码.

如果您采用AppIntent协议,则可以将您的自定义应用程序意图添加到您的小部件扩展目标或应用程序目标中.将其添加到应用程序目标更可取,因为您可以重复使用添加到应用程序小部件中的按钮或切换.

当有人与你的小部件中的按钮或切换进行交互时,系统会在你的应用程序的进程中运行Perform()函数.

推荐答案

在测试中,至少到目前为止,我已经能够确定:

  • 如果您希望您的应用程序意图在您的应用程序和小部件中可重用,您需要将AppIntent struct 添加到您的应用程序和小部件扩展目标中.
  • 如果你不想在你的应用程序中重用这个应用程序的意图,你只想在你的交互小部件中使用它,你仍然需要在你的应用程序的目标和你的小部件扩展的目标上加上AppIntent.否则,如果仅添加到微件目标,当您在应用程序在后台打开时轻触微件中的按钮时,会记录此消息:Could not find an intent with identifier TestIntent, mangledTypeName: Optional("11App_Name17TestIntentV")
  • 当你点击小工具中的按钮时,如果应用程序在后台打开,则应用程序目标中定义的代码将在应用程序的进程中执行,否则当应用程序被终止时,小工具目标中定义的代码将在小工具的进程中执行.
  • 我看不到任何方法可以让它始终在应用程序进程中运行,或者始终在小部件进程中运行.:/

真让人迷惑啊.我提交了FB12584468以请求更新文档,以解释需求并阐明其工作原理(如果这不是有意的行为,则修复错误).

Ios相关问答推荐

无法在fastlane和github操作中从react-native 应用程序构建ios

Fastlane,iOS Provisioning Profile推送通知权限(通过示例)&

更改文本在Flutter 中的位置

检测touch 并忽略其他手势SWIFT SceneKit

如何在HStack中将sfsymbol与Text视图对齐?

无法使用 NavigationView 和 NavigationLink 在 SwiftUI 中弹出当前屏幕

AVAudioRecord 没有音频

如何在Swift/Combine中从timer.publish属性传递两个参数到任意方法

为什么这个 SwiftUI 状态在作为非绑定参数传递时没有更新?

iOS 16 中的状态栏 colored颜色

卡在 Apple 的 SwiftUI 教程第 5 章(更新应用数据)

如何在不支持并发的自动关闭中修复'async'调用?

在 iPad 上删除列表的顶部和底部行

Swift 共享数据模型在页面之间进行通信.这个怎么运作

实现一个将块用作回调的方法

如何阻止图像在 UIImageView 中拉伸?

界面生成器 - 无法从路径加载设计对象(空)

在 Swift 中上传带参数的图像

比较没有时间分量的 NSDates

在两个或多个 iPhone 应用程序之间共享数据