Как параметризованное намерение приложения может отображать дополнительные параметры «ниже сгиба»?
Я добавляю App Intents в свое приложение iOS16 с помощью App Intents framework.
Одно из намерений, которое я хочу добавить, открывает список всех событий в базе данных моего приложения. Представление в приложении имеет ряд доступных фильтров, и я пытаюсь воспроизвести некоторые из этих фильтров в намерении.
У меня уже закодировано несколько вариантов — одинAppEnum
показывая временной охват (прошлое/будущее/все события) и один селектор публикаций (каждое событие может иметь ноль или одну публикацию).
Следуя методам, продемонстрированным в сеансе WWDC2022 «Погружение в намерения приложений», у меня получилось:
struct OpenEventsList: AppIntent {
static var title: LocalizedStringResource = "Open Events List"
static var openAppWhenRun: Bool = true
@Parameter(title: "Scope")
var scope: TimeScope
@Parameter(title: "Publication")
var publication: PublicationEntity?
static var parameterSummary: some ParameterSummary {
Summary("Open \(\.$scope) for \(\.$publication)")
}
@MainActor
func perform() async throws -> some IntentResult {
// implementation omitted
}
}
Это создает рабочее действие быстрого доступа:
В выступлении на WWDC спикер говорит:
Вы также можете указать, какие параметры будут отображаться ниже сгиба, а какие будут скрыты. Эти API-интерфейсы могут делать довольно интересные вещи, например, изменять сводку на основе фактических значений любого параметра вашего намерения, используя API-интерфейсы «Когда» и «Иначе» или API-интерфейсы Switch, Case и Default.
... но я не смог найти нигде объяснения этих API. В документах Apple перечислены некоторые из задействованных протоколов, но это все.
Я хотел бы иметь возможность переместить параметр публикации ниже сгиба, чтобы сводка параметров по умолчанию включала только параметр, основанный на времени, и, если окно действия развернуто, параметр публикации (и другие параметры, которые я могу добавить позже) раскрываются.