Обновление для Swift 4
В Swift 4 снова Stringсоответствует Collection, поэтому можно использовать dropFirstи dropLastобрезать начало и конец строк. Результат имеет тип Substring, поэтому вам нужно передать его Stringконструктору, чтобы вернуть String:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()а dropLast()также возьмите, Intчтобы указать количество отбрасываемых символов:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
Если вы укажете для отбрасывания больше символов, чем указано в строке, результатом будет пустая строка ( "").
let result5 = String(str.dropFirst(10)) // ""
Обновление для Swift 3
Если вы просто хотите удалить первый символ и хотите заменить исходную строку, см. Ответ @MickMacCallum. Если вы хотите создать новую строку в процессе, используйте substring(from:). С помощью расширения Stringвы можете скрыть уродство substring(from:)и substring(to:)создать полезные дополнения для обрезки начала и конца String:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return substring(from: index(startIndex, offsetBy: count))
}
func chopSuffix(_ count: Int = 1) -> String {
return substring(to: index(endIndex, offsetBy: -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Как dropFirstи dropLastдо них, эти функции будут аварийно завершены, если в строке будет недостаточно букв. Ответственность за правильное их использование лежит на вызывающем абоненте. Это верное дизайнерское решение. Можно написать их так, чтобы они возвращали необязательный параметр, который затем должен был быть развернут вызывающим.
Swift 2.x
Увы в Swift 2 , dropFirstи dropLast(предыдущий лучшее решение) не так удобно , как они были раньше. С помощью расширения на Stringможно скрыть уродство substringFromIndexи substringToIndex:
extension String {
func chopPrefix(count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Как dropFirstи dropLastдо них, эти функции будут аварийно завершены, если в строке будет недостаточно букв. Ответственность за правильное их использование лежит на вызывающем абоненте. Это верное дизайнерское решение. Можно написать их так, чтобы они возвращали необязательный параметр, который затем должен был быть развернут вызывающим.
В Swift 1.2 вам нужно будет позвонить chopPrefixтак:
"hello".chopPrefix(count: 3) // "lo"
или вы можете добавить подчеркивание _к определениям функций, чтобы подавить имя параметра:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(_ count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
advance,display.text!применив NSString. Я не говорю, что это хорошее решение - просто исправляю возможное заблуждение. С NSString вы можете индексировать его с помощью Int. - И причина, по которой вы не можете индексировать с помощью Int, не из-за Unicode; это потому, что символ может состоять из нескольких составных кодовых точек.