Оновлення для 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раніше, ці функції припиняться, якщо в рядку не буде достатньо літер. Зловмисник на абонента, щоб правильно їх використовувати. Це дійсне дизайнерське рішення. Можна написати їх, щоб повернути необов’язковий, який потім повинен був би розгорнути абонент.
Швидкий 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; це тому, що символ може складатися з декількох складних кодових точок.