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

时间:2017-04-05 10:17:47

标签: ios swift sirikit nsorderedset

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

func write(to: URL, options: Data.WritingOptions)

根据documentation,我需要为let workoutNames = self.sortedWorkoutNames() let vocabulary = INVocabulary.shared() vocabulary.setVocabularyStrings(workoutNames, of: .workoutActivityName) 使用NSOrderedSet类型。

如何声明它并使用self.sortedWorkoutNames()

数组设置它

编辑:关于上下文项目,我使用了与Siri的Intent。这里的目标是使用像' Benchpress'这样的特定词。或者'鸡肉'只是为了启动我的锻炼应用程序,已经实现了INStartWorkoutIntent并且像魅力一样工作。

1 个答案:

答案 0 :(得分:3)

如果您查看Apple的SiriKit示例代码,您可以告诉他们的函数sortedWorkoutNames()返回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)