为了让你的iOS应用自动支持Siri(而不是要求用户手动添加快捷方式),iOS 16提供了应用快捷方式。
我想指定多个Siri应用快捷方式-每个Intent一个。但是我在这个Swift语法上有点卡住了,我相信有一些简单的东西。
添加应用快捷方式的标准Swift代码段如下所示。
让我困惑的是,appShortcuts
被定义为AppShortcuts的列表([AppShortcut]
),但初始化器是一个单一的值(AppShortcut
)。
1.我不明白这是怎么编译的。是否有扩展或其他东西扰乱了返回类型?
1.如果我把它改为返回一个列表,我会得到Cannot convert value of type '[AppShortcut]' to expected argument type 'AppShortcut'
--但我不是Swift的天才,无法弄清楚为什么预期的参数类型确实是AppShortcut
。
== AppIntents ==
...
public protocol AppShortcutsProvider {
static var appShortcuts: [AppShortcut] { get }
}
...
== My intent ==
import AppIntents
struct AppShortcuts: AppShortcutsProvider {
@AppShortcutsBuilder
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: OrderStatusIntent(),
phrases: ["Where is my \(.applicationName) order?",
"\(.applicationName) order status"]
)
}
}
如果我在Swift Playground中创建一个代码段,一切都会按预期工作。列表中的单个项目。
public struct AppShortcut {
var title: String
}
public protocol AppShortcutsProvider {
static var appShortcuts: [AppShortcut] { get }
}
struct BookShortcuts:AppShortcutsProvider {
static var appShortcuts: [AppShortcut]{[
AppShortcut(
title:"one"
)]
}
}
print(BookShortcuts.appShortcuts)
2条答案
按热度按时间u4dcyp6a1#
解决方案是:@AppShortcutsBuilder指令是一个结果生成器,它是一个修饰性的编译时指令,用于删除列表中的括号和逗号(AFAICT我看不出它还有其他用途)。如果有人能教我它的功能价值,那就太棒了。
了解有关result builders的更多信息
jv4diomz2#
这对我很有效: