Swift 4.0 (auch Swift 5.0)
var str = "Hello, World" // "Hello, World"
str.dropLast() // "Hello, Worl" (non-modifying)
str // "Hello, World"
String(str.dropLast()) // "Hello, Worl"
str.remove(at: str.index(before: str.endIndex)) // "d"
str // "Hello, Worl" (modifying)
Swift 3.0
Die APIs sind etwas schneller geworden , und infolgedessen hat sich die Foundation-Erweiterung etwas geändert:
var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Oder die In-Place-Version:
var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name) // "Dolphi"
Danke Zmey, Rob Allen!
Schneller 2.0+ Weg
Es gibt einige Möglichkeiten, dies zu erreichen:
Über die Foundation-Erweiterung, obwohl sie nicht Teil der Swift-Bibliothek ist:
var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Unter Verwendung der removeRange()
Methode (die Abspaltungen der name
):
var name: String = "Dolphin"
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"
Verwenden der dropLast()
Funktion:
var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Alter String.Index (Xcode 6 Beta 4 +) Weg
Da String
Typen in Swift eine hervorragende UTF-8-Unterstützung bieten sollen, können Sie mit Int
Typen nicht mehr auf Zeichenindizes / -bereiche / Teilzeichenfolgen zugreifen . Stattdessen verwenden Sie 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"
Alternativ (für ein praktischeres, aber weniger lehrreiches Beispiel) können Sie Folgendes verwenden endIndex
:
let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"
Hinweis: Ich fand dies ein guter Ausgangspunkt für das Verständnis zu seinString.Index
Alter (Pre-Beta 4) Weg
Sie können die substringToIndex()
Funktion einfach verwenden und eine weniger als die Länge der String
:
let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"