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