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