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)