Я пытаюсь удалить слово из неизвестной длины строки, вот мой код.

if (newService.range(of: serviceStr) != nil){

    // I should remove selected word here

    print("remove selected")
}else{
    print("add select")
    let space = " , "
    newService = newService + space + serviceStr            
}

Я пробовал много способов, однако в каждом коде я должен указывать offsetBy, которого я не знаю, потому что это выбор пользовательских кнопок.

2
OnlyPrograming 26 Ноя 2016 в 15:35

2 ответа

Лучший ответ

Ты можешь написать

import Foundation

var sentence = "This is a simple sentence"
let wordToRemove = "simple"


if let range = sentence.range(of: wordToRemove) {
   sentence.removeSubrange(range)
}

print(sentence) // This is a  sentence

Если вы также хотите удалить дополнительный пробел после простого слова, замените это

let wordToRemove = "simple"

с этим

let wordToRemove = "simple "
15
Luca Angeletti 26 Ноя 2016 в 13:19

Это подойдет, если вам нужно удалить только serviceStr:

if let range = newService.range(of: serviceStr) {
    print("remove selected")
    newService.removeSubrange(range)
} else {
    print("add select")
    newService += " , " + serviceStr            
}

Но если вам нужно добавить или удалить разделитель, это более сложно, особенно то, как вы его написали: всегда объединяя запятую, разве вы не получите свою первую службу, также начинающуюся с начальной запятой в начале строки ?

Вот предложение получить поддержку чистой запятой:

let space = " , "
if let range = newService.range(of: serviceStr) {
    print("remove selected")
    newService.removeSubrange(range)
    newService = newService.components(separatedBy: space).filter({ !$0.isEmpty }).joined(separator: space)
} else {
    print("add select")
    var components = newService.components(separatedBy: space)
    components.append(serviceStr)
    newService = components.joined(separator: space)           
}
0
Cœur 26 Ноя 2016 в 15:14