如何在AppShortcutsProvider中条件化动态添加AppShortcut?
动态条件化添加App Shortcuts的实现方案
一、条件化返回App Shortcuts列表
AppShortcutsProvider的appShortcuts是静态计算属性,可以直接在属性内部根据运行时条件拼接快捷方式数组。只需将固定快捷方式作为基础,再根据业务逻辑(比如用户状态、功能开关等)追加对应快捷方式即可。
修改你的DefaultAppShortcutProvider示例如下:
struct DefaultAppShortcutProvider: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { var shortcuts = [AppShortcut]() // 添加默认的转账快捷方式 shortcuts.append(AppShortcut( intent: GoToBankTransferIntent(), phrases: [ "Open \(.applicationName) to do a bank transfer", ], shortTitle: "Ordinary Bank Transfer", systemImageName: "eurosign.circle" )) // 条件化添加:仅当用户已绑定信用卡时,追加信用卡还款快捷方式 if UserDefaults.standard.bool(forKey: "hasBoundCreditCard") { shortcuts.append(AppShortcut( intent: GoToCreditCardPaymentIntent(), phrases: [ "Open \(.applicationName) to pay credit card bill", ], shortTitle: "Credit Card Payment", systemImageName: "creditcard.circle" )) } return shortcuts } static let shortcutTileColor: ShortcutTileColor = .lightBlue }
二、运行时动态更新快捷方式
如果需要在用户完成某操作(比如首次绑定信用卡、完成还款)后新增快捷方式,只需两步:
- 持久化更新触发条件的状态(比如用
UserDefaults存储用户绑定状态); - 调用
AppShortcut.update()通知系统重新读取appShortcuts列表,刷新系统级快捷方式。
示例代码(操作完成后的逻辑):
// 用户完成信用卡绑定后,更新持久化状态 UserDefaults.standard.set(true, forKey: "hasBoundCreditCard") // 通知系统刷新App Shortcuts AppShortcut.update()
注意事项
- 条件判断依赖的状态必须持久化存储(如
UserDefaults、Core Data),避免App重启后状态丢失导致快捷方式消失; - 自定义Intent(如
GoToCreditCardPaymentIntent)需要提前在Intent Definition文件中创建并配置; AppShortcut.update()会触发系统重新加载快捷方式列表,无需重启App即可生效。
内容的提问来源于stack exchange,提问作者Fabio Mussi
相关产品推荐
相关产品推荐

