Interfejsy API stały się nieco szybsze , w wyniku czego rozszerzenie Foundation zmieniło się nieco:
var name:String="Dolphin"var truncated = name.substring(to: name.index(before: name.endIndex))
print(name)// "Dolphin"
print(truncated)//"Dolphi"
Lub wersja na miejscu:
var name:String="Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name)//"Dolphi"
Dzięki Zmey, Rob Allen!
Swift 2.0+ Way
Istnieje kilka sposobów na osiągnięcie tego:
Za pośrednictwem rozszerzenia Foundation, mimo że nie jest częścią biblioteki Swift:
var name:String="Dolphin"var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name)// "Dolphin"
print(truncated)//"Dolphi"
Korzystając z removeRange()metody (co ołtarze z name):
var name:String="Dolphin"
name.removeAtIndex(name.endIndex.predecessor())
print(name)//"Dolphi"
Korzystanie z dropLast()funkcji:
var name:String="Dolphin"var truncated =String(name.characters.dropLast())
print(name)// "Dolphin"
print(truncated)//"Dolphi"
Stary ciąg.Indeks (Xcode 6 Beta 4 +) Sposób
Ponieważ Stringtypy w Swift mają na celu zapewnienie doskonałej obsługi UTF-8, nie można już uzyskać dostępu do indeksów / zakresów / podciągów znaków przy użyciu Inttypów. Zamiast tego używasz 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"
Alternatywnie (dla bardziej praktycznego, ale mniej edukacyjnego przykładu) możesz użyć endIndex:
let name:String="Dolphin"
name.substringToIndex(name.endIndex.predecessor())//"Dolphi"
Uwaga: znalazłem to być doskonałym punktem wyjścia do zrozumieniaString.Index
Old (pre-Beta 4) Way
Możesz po prostu użyć substringToIndex()funkcji, podając ją o jeden mniej niż długość String:
let name:String="Dolphin"
name.substringToIndex(countElements(name)-1)//"Dolphi"
Na Xcode 6 beta 6: „String” nie ma członka o nazwiesubstringToIndex
ielyamani,
2
Hej, heads-up, upewnij się, że substringToIndexnie substringFromIndex. To nie sprawia, że czujesz się inteligentnie myląc to, pozwól, że ci powiem.
Louie Bertoncin
2
To prawda, od 21 lipca Xcode 7 Beta 4 mówi, że „String” nie ma członka o nazwie substringToIndex. Ponadto, począwszy od Xcode 7, łańcuch nie ma już .countwłaściwości, jest teraz stosowany tylko do znaków:string.characters.count
kakubei
2
Swift 3:var truncated = name.substring(to: name.index(before: name.endIndex))
Zmey,
2
Twoja odpowiedź to historia Szybkiej ewolucji.
DawnSong,
89
Funkcja globalna dropLast()działa na sekwencjach, a zatem na ciągach:
var expression ="45+22"
expression = dropLast(expression)// "45+2"
// in Swift 2.0 (according to cromanelli's comment below)
expression =String(expression.characters.dropLast())
var str_1="Maxim"
println("output: \(str_1.removeCharsFromEnd(1))")// "Maxi"
println("output: \(str_1.removeCharsFromEnd(3))")// "Ma"
println("output: \(str_1.removeCharsFromEnd(8))")//""
Odniesienie:
Rozszerzenia dodają nową funkcjonalność do istniejącej klasy, struktury lub typu wyliczenia. Obejmuje to możliwość rozszerzenia typów, dla których nie masz dostępu do oryginalnego kodu źródłowego (znanego jako modelowanie retroaktywne). Rozszerzenia są podobne do kategorii w Objective-C. (W przeciwieństwie do kategorii Objective-C rozszerzenia Swift nie mają nazw).
Krótka odpowiedź (aktualna na dzień 16.04.2015): removeAtIndex(myString.endIndex.predecessor())
Przykład:
var howToBeHappy ="Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)//"Practice compassion, attention and gratitude. And smile!"
Meta:
Język kontynuuje szybką ewolucję, przez co okres półtrwania dla wielu wcześniej dobrych odpowiedzi SO jest niebezpiecznie krótki. Zawsze najlepiej jest uczyć się języka i odwoływać się do prawdziwej dokumentacji .
Polecam użycie NSString dla ciągów, którymi chcesz manipulować. Właściwie to myślę o tym jako o deweloperze. Nigdy nie miałem problemu z NSString, który rozwiązałby Swift String ... Rozumiem subtelności. Ale jeszcze ich potrzebuję.
var foo = someSwiftString asNSString
lub
var foo ="Foo"asNSString
lub
var foo:NSString="blah"
A potem cały świat prostych operacji łańcuchowych NSString jest dla Ciebie otwarty.
Jako odpowiedź na pytanie
// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)
Usuwam również mój ostatni znak z ciągu (tj. Tekst UILabel ) w aplikacji 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
}
Oprócz powyższego kodu chciałem usunąć początek łańcucha i nie mogłem nigdzie znaleźć odwołania. Oto jak to zrobiłem:
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
To przycina 17 znaków od początku łańcucha (jego całkowita długość wynosi 67, awansujemy o -50 od końca i gotowe.
Odpowiedzi:
Swift 4.0 (także Swift 5.0)
Swift 3.0
Interfejsy API stały się nieco szybsze , w wyniku czego rozszerzenie Foundation zmieniło się nieco:
Lub wersja na miejscu:
Dzięki Zmey, Rob Allen!
Swift 2.0+ Way
Istnieje kilka sposobów na osiągnięcie tego:
Za pośrednictwem rozszerzenia Foundation, mimo że nie jest częścią biblioteki Swift:
Korzystając z
removeRange()
metody (co ołtarze zname
):Korzystanie z
dropLast()
funkcji:Stary ciąg.Indeks (Xcode 6 Beta 4 +) Sposób
Ponieważ
String
typy w Swift mają na celu zapewnienie doskonałej obsługi UTF-8, nie można już uzyskać dostępu do indeksów / zakresów / podciągów znaków przy użyciuInt
typów. Zamiast tego używaszString.Index
:Alternatywnie (dla bardziej praktycznego, ale mniej edukacyjnego przykładu) możesz użyć
endIndex
:Uwaga: znalazłem to być doskonałym punktem wyjścia do zrozumienia
String.Index
Old (pre-Beta 4) Way
Możesz po prostu użyć
substringToIndex()
funkcji, podając ją o jeden mniej niż długośćString
:źródło
substringToIndex
substringToIndex
niesubstringFromIndex
. To nie sprawia, że czujesz się inteligentnie myląc to, pozwól, że ci powiem.substringToIndex
. Ponadto, począwszy od Xcode 7, łańcuch nie ma już.count
właściwości, jest teraz stosowany tylko do znaków:string.characters.count
var truncated = name.substring(to: name.index(before: name.endIndex))
Funkcja globalna
dropLast()
działa na sekwencjach, a zatem na ciągach:źródło
characters
właściwość String generuje sekwencję, dlatego teraz musisz użyć:expression = expression.characters.dropLast()
expression = String(expression.characters.dropLast())
jeśli chcesz go z powrotem w postaciSwift 4:
W Swift 2 wykonaj następujące czynności:
Polecam ten link, aby zrozumieć ciągi znaków Swift.
źródło
Swift 4/5
źródło
To jest formularz rozszerzenia ciągu:
dla wersji Swift wcześniejszych niż 1.2:
Stosowanie:
Odniesienie:
Zobacz DOCS
źródło
Użyj funkcji
removeAtIndex(i: String.Index) -> Character
:źródło
Najłatwiejszym sposobem przycięcia ostatniego znaku ciągu jest:
źródło
Szybki 4
lub
lub
źródło
źródło
źródło
Szybka kategoria, która mutuje:
Posługiwać się:
źródło
Krótka odpowiedź (aktualna na dzień 16.04.2015):
removeAtIndex(myString.endIndex.predecessor())
Przykład:
Meta:
Język kontynuuje szybką ewolucję, przez co okres półtrwania dla wielu wcześniej dobrych odpowiedzi SO jest niebezpiecznie krótki. Zawsze najlepiej jest uczyć się języka i odwoływać się do prawdziwej dokumentacji .
źródło
Dzięki zastosowaniu nowego typu podciągów:
Swift 4:
Krótsza droga:
źródło
Użyj funkcji
advance(startIndex, endIndex)
:źródło
Inny sposób Jeśli chcesz usunąć jedną lub więcej postaci z końca.
Gdzie XX to liczba znaków, które chcesz usunąć.
źródło
Swift 3 (zgodnie z dokumentami ) 20 listopada 2016
źródło
Polecam użycie NSString dla ciągów, którymi chcesz manipulować. Właściwie to myślę o tym jako o deweloperze. Nigdy nie miałem problemu z NSString, który rozwiązałby Swift String ... Rozumiem subtelności. Ale jeszcze ich potrzebuję.
lub
lub
A potem cały świat prostych operacji łańcuchowych NSString jest dla Ciebie otwarty.
Jako odpowiedź na pytanie
źródło
dropLast()
Funkcja usuwa ostatni element łańcucha.źródło
Swift 3 : Gdy chcesz usunąć końcowy ciąg:
źródło
Szybki 4.2
Usuwam również mój ostatni znak z ciągu (tj. Tekst UILabel ) w aplikacji IOS
źródło
źródło
Oprócz powyższego kodu chciałem usunąć początek łańcucha i nie mogłem nigdzie znaleźć odwołania. Oto jak to zrobiłem:
To przycina 17 znaków od początku łańcucha (jego całkowita długość wynosi 67, awansujemy o -50 od końca i gotowe.
źródło