Предоставьте пример параметра в представлении подсказок Siri.
Я использую ярлыки приложений iOS16. Я использую, чтобы показать пользователям возможности.
МойAddItem
намерение имеет параметр, для которого объект добавитьItem
к. Ярлык предложит это сделать.
@available(iOS 16.0, *)
struct MyShortcuts: AppShortcutsProvider {
@AppShortcutsBuilder static var appShortcuts: [AppShortcut] {
AppShortcut(intent: AddItem(), phrases: [
"Add new item to \(\.$box) in \(.applicationName)",
"Add new item in \(.applicationName)",
],
shortTitle: "Add New Item",
systemImageName: "pills"
)
}
}
Я хотел бы добавить примерBox
(из существующих данных пользователя, как я делаю для устранения неоднозначности) кSiriTipView
.
В настоящее время представление подсказки не заполняет заполнитель объекта:
"Add new item to ${box} in <My App Name>"
Вид кончика определяется следующим образом.
SiriTipView(intent: AddItem())
Я понимаю, что мог бы просто изменить самую верхнюю фразу и использовать фразу без параметра, но я думаю, что пользователю было бы полезно увидеть, что он может произносить параметр поля.
Я попытался инициализировать вид подсказки с помощьюIntentParameter
так:
SiriTipView(intent: AddItem(box: IntentParameter<BoxAppEntity>))
Но я не мог понять, как просто дать ему пример объекта-коробки. Думаю, мне нужно знать, как инициализировать IntentParameter конкретным объектом.
3 ответа
Ответ user4346339 привел меня в правильном направлении.
Я обнаружил это со многими изIntentParameter
инициализаторов, имя моего конкретного объекта игнорировалось или были ошибки во время компиляции.
В итоге мне пришлось установитьwrappedValue
так.
func getIntentParameter() -> IntentParameter<BoxAppEntity?> {
let parameter = IntentParameter<BoxAppEntity?>(title: "Example Parameter")
parameter.wrappedValue = BoxAppEntity(id: "boxID", displayString: "Box Name")
return parameter
}
Затем я использовал это вSiriTipView
:
SiriTipView(intent: AddItem(box: getIntentParameter()))
вgetIntentParameter
метод, я могу просто установитьdisplayString
на основе некоторых произвольных пользовательских данных.
Чтобы инициализировать IntentParameter конкретной сущностью для SiriTipView, вы можете создать экземпляр IntentParameter с нужным значением сущности. Вот пример того, как этого можно добиться:
swift
import Intents
let exampleBoxEntity = BoxAppEntity()
exampleBoxEntity.boxName = "Example Box"
let boxParameter = INParameter(intent: AddItemIntent.intentDefinition(), parameterKey: "box")
boxParameter.displayString = "Example Box"
boxParameter.defaultValue = exampleBoxEntity
let tipView = SiriTipView(intent: AddItemIntent(), parameters: [boxParameter])
В приведенном выше коде exampleBoxEntity — это экземпляр BoxAppEntity с желаемым значением для сущности. Вы можете установить необходимые свойства exampleBoxEntity в соответствии с вашей моделью данных. Затем создается объект INParameter с определением намерения (AddItemIntent.intentDefinition()) и ключом параметра («поле»). Свойству displayString присвоено значение «Example Box», чтобы предоставить удобную метку для примера сущности. Наконец, для параметра defaultValue установлено значение exampleBoxEntity, чтобы связать конкретное значение объекта с параметром. BoxParameter передается как элемент массива параметров при инициализации SiriTipView с помощью AddItemIntent. Это гарантирует, что SiriTipView отобразит пример объекта коробки в заполнителе для параметра Box. Обратите внимание: в коде предполагается, что вы определили AddItemIntent и BoxAppEntity, соответствующие необходимым протоколам и требованиям для интеграции SiriKit в ваше приложение iOS. Обязательно замените их соответствующими определениями из вашей кодовой базы.
Чтобы предоставить пример сущности Box в SiriTipView для вашего намерения AddItem, вы можете создать экземпляр IntentParameter с конкретным объектом сущности Box. Вот как вы можете это сделать:
import IntentsUI
// Assuming Box is a custom entity class
let exampleBox = Box(name: "Example Box") // Create an example Box entity
let boxParameter = IntentParameter<BoxAppEntity>(
name: "box",
value: BoxAppEntity(box: exampleBox) // Wrap the example Box in a BoxAppEntity
)
let tipView = SiriTipView(intent: AddItem(box: boxParameter))
В приведенном выше коде вы создаете примерBox
объект с необходимыми данными, а затем обернуть его вBoxAppEntity
экземпляр для удовлетворенияIntentParameter
требование. Наконец, вы можете передать этоboxParameter
в качестве параметра дляAddItem
намерение при инициализацииSiriTipView
.
Предоставляя пример сущности Box в SiriTipView, пользователь сможет увидеть значение заполнителя и понять, что он может произносить параметр поля при использовании ярлыков приложения.