Допустим, я определил пользовательское намерение, называемое FooIntent
, в файле .intentdefinition
.
У него есть один параметр bar
типа Decimal
, для которого:
- User can supply value in Siri and Shortcuts app
активно.
- Default Value
равно 0
.
Его автоматически сгенерированное определение класса теперь выглядит так:
public class FooIntent: INIntent {
@NSManaged public var bar: NSNumber?
}
Если я создаюFooIntent
, установите bar
в nil
и передайте его в INUIAddVoiceShortcutViewController
:
let intent = FooIntent()
intent.bar = nil
intent.suggestedInvocationPhrase = "Do foo"
let shortcut = INShortcut(intent: intent)
let viewController = INUIAddVoiceShortcutViewController(shortcut: shortcut!)
viewController.delegate = self
window?.rootViewController?.present(viewController, animated: true, completion: nil)
появляется модальный Add to Siri
с параметром bar
, заполненным 0
,его значение по умолчанию.
Если в пользовательском интерфейсе Add to Siri
затем изменить bar
на Ask Each Time
и нажать Add to Siri
, результирующий вызов метода делегата создает объект INVoiceShortcut
, содержащий nil
значение для bar
:
func addVoiceShortcutViewController(_ controller: INUIAddVoiceShortcutViewController, didFinishWith shortcut: INVoiceShortcut?, error: Error?) {
if let intent = shortcut?.shortcut.intent as? FooIntent {
print(intent.bar) // nil
}
controller.dismiss(animated: true, completion: nil)
}
То же самое верно, если я установил bar
в Clipboard
в пользовательском интерфейсе.
Если я установил его в значение, например42
, тогда intent.bar
правильно возвращает 42
.
Поскольку nil
, по-видимому, представляет несколько концепций для параметра, где концепт Ask Each Time
хранится в ярлыке или намеренииобъекты?
Могу ли я что-нибудь передать в INUIAddVoiceShortcutViewController
, чтобы intent.bar = <Ask Each Time>
?