Удаление массива слов из строки - PullRequest
0 голосов
/ 13 октября 2018

У меня есть данные, которые включают определенные слова, которые я не хочу отображать.Я пытаюсь удалить этот набор слов из строки перед отображением на этикетке.С помощью имеющегося у меня кода я могу делать это слово за словом, но мне нужно набирать код X количество раз, чтобы достичь его для каждого слова.Какой будет правильный способ удалить набор слов сразу?

Вот код, который я сейчас использую:

 let remove = ["Production", "Productions", "Studio", "Studios", 
"Entertainment", "Pictures", "Company", "Films", "Media"]
                if let range = string.range(of: remove) {
                    string.removeSubrange(range)
                }
                self.label.text = string

С этим кодом я получаю эту ошибку на range строка:

Тип аргумента '[String]' не соответствует ожидаемому типу 'StringProtocol'

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Ошибка ясна.

Аргумент range(of является String, а не массивом ([String])

Вам необходим цикл

let wordsToRemove = ["Production", "Productions", "Studio", "Studios", "Entertainment", "Pictures", "Company", "Films", "Media"]
for word in wordsToRemove {
   if let range = string.range(of: word) {
      string.removeSubrange(range)
   }
}
self.label.text = string

Альтернативой является регулярное выражение

let trimmedString = string.replacingOccurrences(of: "(Productions?|Studios?|Entertainment|Pictures|Company|Films|Media)",
                                             with: "",
                                          options: .regularExpression)
self.label.text = trimmedString
0 голосов
/ 13 октября 2018

Вы можете указать разрешенные слова, а затем использовать Filter, чтобы удалить ненужные слова:

var strings = ["Hello","Playground","World","Earth"]

var allowedStrings = "Playground Earth" // Specify using space
let seperated:[String] = allowedStrings.components(separatedBy: " ")

for i in seperated {
    if strings.contains(i) {
        strings = strings.filter{$0 != i}
    }
}
print(strings)   // ["Playground", "Earth"]
0 голосов
/ 13 октября 2018

Вы можете попробовать

remove.forEach {
   if let range = string.range(of:$0) {
     string.removeSubrange(range)
  }
}

, так как range(of:) ожидает строку, а не массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...