Swift 3 - Как объявить NSOrderedSet для использования setVocabularyStrings?

Я хочу использовать прототип этой функции для добавления словарного запаса в SiriKit. Документация Apple показывает следующий пример кода:

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

Согласно документации, мне нужно использовать NSOrderedSet тип для self.sortedWorkoutNames(),

Как объявить это и установить его с массивом Strings?

РЕДАКТИРОВАТЬ: О проекте контекста, я использую Intents с Siri. Цель здесь состоит в том, чтобы использовать определенное слово, такое как "Benchpress" или "Chicken", просто чтобы запустить мое приложение для тренировки с уже реализованным INStartWorkoutIntent, которое работает как шарм.

1 ответ

Решение

Если вы посмотрите на пример кода Apple для SiriKit, вы можете сказать, что их функция sortedWorkoutNames() возвращает NSOrderedSet, Посмотрите на тип workoutNames в версии Objective-C:

NSOrderedSet* workoutNames = [self sortedWorkoutNames];

В Свифте это было бы

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)
Другие вопросы по тегам