假设我在.intentdefinition文件中定义了一个名为FooIntent的自定义意图。
它有一个单一参数bar,类型为Decimal,其中:
- 用户可以在Siri和Shortcuts应用程序中提供值已激活。
- 默认值为0。 它的自动生成的类定义现在如下所示:
如果我构建了一个
它有一个单一参数bar,类型为Decimal,其中:
- 用户可以在Siri和Shortcuts应用程序中提供值已激活。
- 默认值为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)
在“添加到Siri”模态框中,bar
参数填充为默认值0
。
如果我在“添加到Siri”界面中更改bar
为“每次询问”,并按下“添加到Siri”按钮,则生成的代理方法调用会产生一个包含bar
为nil
值的INVoiceShortcut
对象:
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)
}
如果我在UI中将bar
设置为Clipboard
,那么结果也是相同的。
如果我将其设置为某个值,例如42
,那么intent.bar
会正确返回42
。
由于nil
似乎代表参数的多个概念,在捷径或意图对象中存储了Ask Each Time
的概念吗?
我是否可以传递任何内容到INUIAddVoiceShortcutViewController
,使得intent.bar = <Ask Each Time>
?