Update für Swift 4
In Swift 4 String
passt sich Collection
wieder an, so dass es möglich ist, die Anfänge und Enden von Strings zu verwenden dropFirst
und dropLast
zu kürzen. Das Ergebnis ist vom Typ Substring
, daher müssen Sie es an den String
Konstruktor übergeben, um Folgendes zurückzugewinnen String
:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()
und dropLast()
nehmen Sie auch ein Int
, um die Anzahl der zu löschenden Zeichen anzugeben:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
Wenn Sie mehr Zeichen angeben, die gelöscht werden sollen, als in der Zeichenfolge enthalten sind, ist das Ergebnis die leere Zeichenfolge ( ""
).
let result5 = String(str.dropFirst(10)) // ""
Update für Swift 3
Wenn Sie nur das erste Zeichen entfernen und die ursprüngliche Zeichenfolge ändern möchten, lesen Sie die Antwort von @ MickMacCallum. Wenn Sie dabei eine neue Zeichenfolge erstellen möchten, verwenden Sie substring(from:)
. Mit der Erweiterung auf String
können Sie die Hässlichkeit von verbergen substring(from:)
und substring(to:)
nützliche Ergänzungen erstellen, um den Anfang und das Ende von 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"
Wie dropFirst
und dropLast
vor ihnen stürzen diese Funktionen ab, wenn im String nicht genügend Buchstaben verfügbar sind. Es liegt in der Verantwortung des Anrufers, sie ordnungsgemäß zu verwenden. Dies ist eine gültige Entwurfsentscheidung. Man könnte sie schreiben, um ein optionales zurückzugeben, das dann vom Anrufer ausgepackt werden müsste.
Swift 2.x.
Ach in Swift 2 , dropFirst
und dropLast
(die bisher besten Lösung) ist nicht so bequem wie sie vorher waren. Mit einer Erweiterung auf String
können Sie die Hässlichkeit von substringFromIndex
und verbergen 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"
Wie dropFirst
und dropLast
vor ihnen stürzen diese Funktionen ab, wenn im String nicht genügend Buchstaben verfügbar sind. Es liegt in der Verantwortung des Anrufers, sie ordnungsgemäß zu verwenden. Dies ist eine gültige Entwurfsentscheidung. Man könnte sie schreiben, um ein optionales zurückzugeben, das dann vom Anrufer ausgepackt werden müsste.
In Swift 1.2 müssen Sie wie folgt aufrufen chopPrefix
:
"hello".chopPrefix(count: 3) // "lo"
oder Sie können _
den Funktionsdefinitionen einen Unterstrich hinzufügen , um den Parameternamen zu unterdrücken:
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
, indem Siedisplay.text!
auf NSString übertragen. Ich sage nicht, dass dies eine gute Lösung ist - nur um ein mögliches Missverständnis zu korrigieren. Mit NSString können Sie mit Int. - Und der Grund, warum Sie nicht mit Int indizieren können, liegt nicht an Unicode. Dies liegt daran, dass ein Zeichen aus mehreren zusammengesetzten Codepunkten bestehen kann.