Понимание документации removeRange (_:)

Чтобы удалить подстроку в указанном диапазоне, используйте removeRange (_:) Метод:

1 let range = advance(welcome.endIndex, -6)..<welcome.endIndex
2 welcome.removeRange(range)
3 println(welcome)
4 // prints "hello"

Отрывок из: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itun.es/ca/jEUH0.l

Привет,

Я не полностью понимаю синтаксис и функцию строки 1 в приведенном выше коде.

Пожалуйста, объясните, используя эту строку:

let welcome = "hello there"

Вот что я разработал:

"Чтобы изменить индекс начала и конца, используйте advance()."
От: qaru.site/info/15478/...

Приветствуется лучшее документирование advance(). то есть аргументы

Используйте ..<, чтобы сделать диапазон, который опускает его верхнее значение

Отрывок из: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itun.es/ca/jEUH0.l

welcome.endIndex будет 11

Ответ 1

Swift 2

Мы будем использовать var, так как removeRange должен работать с изменяемой строкой.

var welcome = "hello there"

Эта строка:

let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex

означает, что мы начинаем с конца строки (welcome.endIndex) и возвращаемся на 6 символов (вперед по отрицательному числу = назад), затем задаем диапазон (..<) между нашей позицией и конец строки (welcome.endIndex).

Он создает диапазон 5..<11, который включает в себя "там" часть строки.

Если вы удалите этот диапазон символов из строки с помощью:

welcome.removeRange(range)

тогда ваша строка будет остальной частью:

print(welcome) // prints "hello"

Вы можете сделать это другим способом (начиная с начального индекса строки) для того же результата:

welcome = "hello there"
let otherRange = welcome.startIndex.advancedBy(5)..<welcome.endIndex
welcome.removeRange(otherRange)
print(welcome) // prints "hello"

Здесь мы начинаем с начала строки (welcome.startIndex), затем мы продвигаем на 5 символов, затем делаем диапазон (..<) отсюда до конца строки (welcome.endIndex).

Примечание: функция advance может работать вперед и назад.

Swift 3

Синтаксис изменился, но понятия одинаков.

var welcome = "hello there"
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
print(welcome) // prints "hello"

welcome = "hello there"
let otherRange = welcome.index(welcome.startIndex, offsetBy: 5)..<welcome.endIndex
welcome.removeSubrange(otherRange)
print(welcome) // prints "hello"