Swift 3 - 如何声明 NSOrderedSet 以使用 setVocabularyStrings?

Swift 3 - How to declare an NSOrderedSet to use setVocabularyStrings?

我想使用 this 函数的原型来向 SiriKit 添加词汇。 Apple 的文档显示了以下示例代码:

let workoutNames = self.sortedWorkoutNames()
let vocabulary = INVocabulary.shared()
vocabulary.setVocabularyStrings(workoutNames, of: .workoutActivityName)

根据 documentation,我需要为 self.sortedWorkoutNames() 使用 NSOrderedSet 类型。

如何用Strings的数组来声明和设置?

编辑:关于上下文项目,我在 Siri 中使用 Intents。这里的目标是使用像 'Benchpress' 或 'Chicken' 这样的特定词来启动我的锻炼应用程序,并且已经实现了 INStartWorkoutIntent 并且工作得很好。

如果您查看 Apple 的 SiriKit 示例代码,您可以看出它们的函数 sortedWorkoutNames() returns 和 NSOrderedSet。查看Objective-C版本中workoutNames的类型:

NSOrderedSet* workoutNames = [self sortedWorkoutNames];

在 Swift 中是

let workoutNames: NSOrderedSet = self.sortedWorkoutNames()

如果您有一个要传递给 INVocabulary.setVocabularyStrings(_:of:) 的数组,则需要将其转换为有序集。正如@larme 在他的评论中所说,NSOrderedSet 有一个将数组作为输入的初始化程序。

您的代码可能如下所示:

let myVocab = ["Benchpress", "Squats", "Deadlift"]
let myVocabSet = NSOrderedSet(array: myVocab) //Convert myVocab to an NSOrderedSet

let vocabulary = INVocabulary.shared()
vocabulary.setVocabularyStrings(myVocabSet, of: .workoutActivityName)