我几乎是新的编码,我需要做一个应用程序,使用AppIntents。我希望Intent使用一个元素数组来更改文本。我们假设数组是一个字符串数组:[“山”,“车”,“球”]如果我告诉Siri:“Hey Siri,set the text to Ball”Intent应将文本更改为“Ball”。如果我告诉Siri:“嘿Siri,将文本设置为“山”,意图应更改为“山”
struct chooseWord: AppIntent {
@Parameter(title: "Word")
var word: String
static var title: LocalizedStringResource = "Change the text"
static var description = IntentDescription("Changes the text on screen")
static var openAppWhenRun: Bool = true
static var parameterSummary: some ParameterSummary {
Summary("Changes the word to ...")
}
@MainActor
func perform() async throws -> some IntentResult {
return .result(dialog: "Done!")
}
}
这是基本的Intent代码。希望你能帮助我。对不起,如果我拼错了什么或我使用错误的语法,英语不是我的第一语言。谢谢
1条答案
按热度按时间olhwl3o21#
你基本上有两个选项来将数组输入到Shortcuts中。如果你的数组是一个 * 固定 * 的选项集,你应该使用
AppEnum
协议。对于一组 * 动态 * 选项(如标题中所述),您必须使用AppEntity
。通过
AppEntity
实现动态数组采用动态
AppEntity
虽然非常强大和灵活,但代码要多一点。你可以在GitHub here上找到一个很好的例子。我建议您观看Dive into App Intents WWDC会议(9:47)或查看this Apple Documentation。AppEntity
必须符合Identifiable
,因为Shortcuts应用程序可能会保存用户选择。它还需要一堆更多的让快捷方式应用程序知道如何显示/命名的东西。最后一行代码显示,您必须为每个实体提供一个
EntityQuery
。这用于将实体从您的应用动态馈送到Shortcuts应用。您可以进一步扩展它以使其可搜索,并添加“查找XYZ”操作。或者,您也可以将EntityStringQuery
用于基本字符串实体,将EntityPropertyQuery
用于具有多个属性的更复杂实体。基本定义如下:最后,你把它和你的意图联系起来,就像这样:
我知道这看起来很多,它是!我也花了一段时间才明白这一点,但我希望这将有助于你进入正确的方向。