Предоставьте пример параметра в представлении подсказок 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, пользователь сможет увидеть значение заполнителя и понять, что он может произносить параметр поля при использовании ярлыков приложения.

Другие вопросы по тегам