Обновление для 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; это потому, что символ может состоять из нескольких составных кодовых точек.