Может ли свойство INIntent получить значение «спрашивать каждый раз»? - PullRequest
1 голос
/ 19 октября 2019

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

...