API-интерфейсы стали немного более быстрыми , и в результате расширение Foundation немного изменилось:
var name:String="Dolphin"var truncated = name.substring(to: name.index(before: name.endIndex))
print(name)// "Dolphin"print(truncated)//"Dolphi"
Или версия на месте:
var name:String="Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name)//"Dolphi"
Спасибо, Змей, Роб Аллен!
Swift 2.0+ Way
Есть несколько способов сделать это:
Через расширение Foundation, несмотря на то, что он не является частью библиотеки Swift:
var name:String="Dolphin"var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name)// "Dolphin"print(truncated)//"Dolphi"
С помощью removeRange()метода (который изменяет с name):
var name:String="Dolphin"
name.removeAtIndex(name.endIndex.predecessor())
print(name)//"Dolphi"
Используя dropLast()функцию:
var name:String="Dolphin"var truncated =String(name.characters.dropLast())
print(name)// "Dolphin"print(truncated)//"Dolphi"
Old String.Index (Xcode 6 Beta 4 +) Way
Поскольку Stringтипы в Swift стремятся обеспечить отличную поддержку UTF-8, вы больше не можете обращаться к индексам / диапазонам / подстрокам символов, используя Intтипы. Вместо этого вы используете String.Index:
let name:String="Dolphin"let stringLength = count(name)// Since swift1.2 `countElements` became `count`let substringIndex = stringLength -1
name.substringToIndex(advance(name.startIndex, substringIndex))//"Dolphi"
В качестве альтернативы (для более практичного, но менее образовательного примера) вы можете использовать endIndex:
let name:String="Dolphin"
name.substringToIndex(name.endIndex.predecessor())//"Dolphi"
Примечание: я нашел это отличной отправной точкой для пониманияString.Index
Старый (до бета-версии 4) путь
Вы можете просто использовать substringToIndex()функцию, предоставив ей на единицу меньше длины String:
let name:String="Dolphin"
name.substringToIndex(countElements(name)-1)//"Dolphi"
В Xcode 6 beta 6: у «String» нет имени участникаsubstringToIndex
ielyamani
2
Эй, подожди, убедитесь, что это substringToIndexне так substringFromIndex. Это не заставляет вас чувствовать себя умным, ошибаясь, позвольте мне сказать вам.
Луи Бертончин
2
Это правда, что по состоянию на 21 июля в Xcode 7 Beta 4 говорится, что у «String» нет имени участника substringToIndex. Кроме того, начиная с Xcode 7, строка больше не имеет .countсвойства, теперь она применяется только к символам:string.characters.count
Глобальная dropLast()функция работает с последовательностями и, следовательно, со строками:
var expression ="45+22"
expression = dropLast(expression)// "45+2"// in Swift 2.0 (according to cromanelli's comment below)expression =String(expression.characters.dropLast())
В Swift 2.0 charactersсвойство String выводит последовательность, поэтому теперь вы должны использовать: expression = expression.characters.dropLast()
gui_dos
5
В Swift 2.0 для того, чтобы правильно привести результат, expression = String(expression.characters.dropLast())если вы хотите вернуть его в виде строки
Cromanelli
69
Свифт 4:
let choppedString =String(theString.dropLast())
В Swift 2 сделайте это:
let choppedString =String(theString.characters.dropLast())
Я рекомендую эту ссылку, чтобы получить представление о строках Swift.
var str_1="Maxim"
println("output: \(str_1.removeCharsFromEnd(1))")// "Maxi"println("output: \(str_1.removeCharsFromEnd(3))")// "Ma"println("output: \(str_1.removeCharsFromEnd(8))")//""
Ссылка:
Расширения добавляют новые функциональные возможности к существующему классу, структуре или типу перечисления. Это включает в себя возможность расширять типы, для которых у вас нет доступа к исходному исходному коду (известный как ретроактивное моделирование). Расширения похожи на категории в Objective-C. (В отличие от категорий Objective C, расширения Swift не имеют имен.)
Краткий ответ (по состоянию на 2015-04-16): removeAtIndex(myString.endIndex.predecessor())
Пример:
var howToBeHappy ="Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)//"Practice compassion, attention and gratitude. And smile!"
Мета:
Язык продолжает свою быструю эволюцию, делая период полураспада для многих ранее хороших SO ответов опасно коротким. Всегда лучше выучить язык и обратиться к реальной документации .
Я бы рекомендовал использовать NSString для строк, которыми вы хотите манипулировать. На самом деле, если подумать об этом как о разработчике, у меня никогда не было проблем с NSString, которые Swift String решит ... Я понимаю тонкости. Но я еще не нуждался в них.
var foo = someSwiftString asNSString
или
var foo ="Foo"asNSString
или
var foo:NSString="blah"
И тогда вам откроется целый мир простых строковых операций NSString.
Как ответ на вопрос
// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)
Я также удаляю свой последний символ из строки (т.е. текст UILabel ) в приложении IOS
@IBOutletweakvar labelText:UILabel!// Do Connection with UILabel
@IBActionfunc whenXButtonPress(_ sender:UIButton){// Do Connection With X Button
labelText.text =String((labelText.text?.dropLast())!)// Delete the last caracter and assign it
}
В дополнение к приведенному выше коду я хотел удалить начало строки и не мог найти ссылку нигде. Вот как я это сделал:
var mac = peripheral.identifier.description
let range = mac.startIndex..<mac.endIndex.advancedBy(-50)
mac.removeRange(range)// trim 17 characters from the beginning
let txPower = peripheral.advertisements.txPower?.description
Это обрезает 17 символов от начала строки (его общая длина равна 67, мы продвигаемся на -50 с конца, и вот, у вас это есть.
Ответы:
Swift 4.0 (также Swift 5.0)
Swift 3.0
API-интерфейсы стали немного более быстрыми , и в результате расширение Foundation немного изменилось:
Или версия на месте:
Спасибо, Змей, Роб Аллен!
Swift 2.0+ Way
Есть несколько способов сделать это:
Через расширение Foundation, несмотря на то, что он не является частью библиотеки Swift:
С помощью
removeRange()
метода (который изменяет сname
):Используя
dropLast()
функцию:Old String.Index (Xcode 6 Beta 4 +) Way
Поскольку
String
типы в Swift стремятся обеспечить отличную поддержку UTF-8, вы больше не можете обращаться к индексам / диапазонам / подстрокам символов, используяInt
типы. Вместо этого вы используетеString.Index
:В качестве альтернативы (для более практичного, но менее образовательного примера) вы можете использовать
endIndex
:Примечание: я нашел это отличной отправной точкой для понимания
String.Index
Старый (до бета-версии 4) путь
Вы можете просто использовать
substringToIndex()
функцию, предоставив ей на единицу меньше длиныString
:источник
substringToIndex
substringToIndex
не такsubstringFromIndex
. Это не заставляет вас чувствовать себя умным, ошибаясь, позвольте мне сказать вам.substringToIndex
. Кроме того, начиная с Xcode 7, строка больше не имеет.count
свойства, теперь она применяется только к символам:string.characters.count
var truncated = name.substring(to: name.index(before: name.endIndex))
Глобальная
dropLast()
функция работает с последовательностями и, следовательно, со строками:источник
characters
свойство String выводит последовательность, поэтому теперь вы должны использовать:expression = expression.characters.dropLast()
expression = String(expression.characters.dropLast())
если вы хотите вернуть его в виде строкиСвифт 4:
В Swift 2 сделайте это:
Я рекомендую эту ссылку, чтобы получить представление о строках Swift.
источник
Свифт 4/5
источник
Это форма расширения строки :
для версий Swift ранее 1.2:
Использование:
Ссылка:
Посмотреть документы
источник
Используйте функцию
removeAtIndex(i: String.Index) -> Character
:источник
Самый простой способ обрезать последний символ строки:
источник
Swift 4
или
или
источник
источник
источник
Быстрая категория, которая мутирует:
Использование:
источник
Краткий ответ (по состоянию на 2015-04-16):
removeAtIndex(myString.endIndex.predecessor())
Пример:
Мета:
Язык продолжает свою быструю эволюцию, делая период полураспада для многих ранее хороших SO ответов опасно коротким. Всегда лучше выучить язык и обратиться к реальной документации .
источник
С использованием нового типа подстроки:
Свифт 4:
Более короткий путь:
источник
Используйте функцию
advance(startIndex, endIndex)
:источник
Другой способ Если вы хотите удалить один или несколько символов с конца.
Где XX - количество символов, которое вы хотите удалить.
источник
Swift 3 (согласно документам ) 20 ноября 2016
источник
Я бы рекомендовал использовать NSString для строк, которыми вы хотите манипулировать. На самом деле, если подумать об этом как о разработчике, у меня никогда не было проблем с NSString, которые Swift String решит ... Я понимаю тонкости. Но я еще не нуждался в них.
или
или
И тогда вам откроется целый мир простых строковых операций NSString.
Как ответ на вопрос
источник
dropLast()
Функция удаляет последний элемент строки.источник
Swift 3 : когда вы хотите удалить завершающую строку:
источник
Swift 4.2
Я также удаляю свой последний символ из строки (т.е. текст UILabel ) в приложении IOS
источник
источник
В дополнение к приведенному выше коду я хотел удалить начало строки и не мог найти ссылку нигде. Вот как я это сделал:
Это обрезает 17 символов от начала строки (его общая длина равна 67, мы продвигаемся на -50 с конца, и вот, у вас это есть.
источник