Вот менее наивное решение, которое будет работать для строк, содержащих пунктуацию.
Это сначала разбивает строку на слова, используя локализованные правила. Затем он находит пересечение двух массивов слов.
func findWords(text: String, words: [String]) -> [String] {
var textWords: Set<String> = []
text.enumerateSubstrings(in: text.startIndex..<text.endIndex, options: [.byWords, .localized]) { (word, _, _, _) in
if let word = word {
textWords.insert(word)
}
}
let matches = textWords.intersection(words)
return Array(matches)
}
print(findWords(text: "The word String is exists", words: ["This", "is", "Array", "of", "String"]))
print(findWords(text: "Hello there. How are you today?", words: ["there", "is", "today"]))
Выход:
["String", "is"]
["там", "сегодня"]
На момент написания статьи ни одно из других решений не работало для второго примера.