Ich möchte das erste Zeichen aus einer Zeichenfolge löschen. Das Prägnanteste, was ich mir bisher ausgedacht habe, ist:
display.text = display.text!.substringFromIndex(advance(display.text!.startIndex, 1))
Ich weiß, dass wir Int
wegen Unicode nicht in einen String mit einem indizieren können , aber diese Lösung scheint furchtbar ausführlich zu sein. Gibt es einen anderen Weg, den ich übersehen habe?
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.String
schlagen, hat Swift 3 diecapitalized
Funktion eingeführtString
.Antworten:
Wenn Sie Swift 3 verwenden , können Sie den zweiten Abschnitt dieser Antwort ignorieren. Die gute Nachricht ist, dass dies jetzt wieder prägnant ist! Verwenden Sie einfach die neue Methode remove (at :) von String.
Ich mag die globale
dropFirst()
Funktion dafür.Es ist kurz, klar und funktioniert für alles, was dem Sliceable-Protokoll entspricht.
Wenn Sie Swift 2 verwenden , hat sich diese Antwort geändert. Sie können dropFirst weiterhin verwenden, jedoch nicht, ohne das erste Zeichen aus Ihrer Strings-
characters
Eigenschaft zu löschen und das Ergebnis dann wieder in einen String zu konvertieren. dropFirst ist auch eine Methode geworden, keine Funktion.Eine andere Alternative besteht darin, die Suffixfunktion zum Spleißen der Zeichenfolgen zu verwenden
UTF16View
. Natürlich muss dies auch danach wieder in einen String umgewandelt werden.All dies bedeutet, dass sich herausgestellt hat, dass die ursprünglich von mir bereitgestellte Lösung in neueren Versionen von Swift nicht die prägnanteste Methode ist. Ich empfehle, auf die Lösung von @chris zurückzugreifen,
removeAtIndex()
wenn Sie nach einer kurzen und intuitiven Lösung suchen.Und wie von @vacawama in den Kommentaren unten hervorgehoben, besteht eine andere Option, die den ursprünglichen String nicht ändert, darin, substringFromIndex zu verwenden.
Oder wenn Sie zufällig versuchen, ein Zeichen am Anfang und Ende des Strings abzulegen, können Sie substringWithRange verwenden. Achten Sie nur darauf, sich vor dem Zustand zu schützen, wenn
startIndex + n > endIndex - m
.Die letzte Zeile kann auch in Indexnotation geschrieben werden.
quelle
remove(at:)
Methode zu beachten : Es ist das entfernte Zeichen, nicht die neue Zeichenfolge. Zum Beispiellet removedCharacter = myString.remove(at: myString.startIndex)
. Ich habe den Fehler gemacht, das Ergebnis des Methodenaufrufs zurückzugeben, und dabei vergessen, dass dies bei diesem Ansatz der Fall war. Viel Spaß beim Codieren!Update für Swift 4
In Swift 4
String
passt sichCollection
wieder an, so dass es möglich ist, die Anfänge und Enden von Strings zu verwendendropFirst
unddropLast
zu kürzen. Das Ergebnis ist vom TypSubstring
, daher müssen Sie es an denString
Konstruktor übergeben, um Folgendes zurückzugewinnenString
:dropFirst()
unddropLast()
nehmen Sie auch einInt
, um die Anzahl der zu löschenden Zeichen anzugeben:Wenn Sie mehr Zeichen angeben, die gelöscht werden sollen, als in der Zeichenfolge enthalten sind, ist das Ergebnis die leere Zeichenfolge (
""
).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 aufString
können Sie die Hässlichkeit von verbergensubstring(from:)
undsubstring(to:)
nützliche Ergänzungen erstellen, um den Anfang und das Ende vonString
:Wie
dropFirst
unddropLast
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
unddropLast
(die bisher besten Lösung) ist nicht so bequem wie sie vorher waren. Mit einer Erweiterung aufString
können Sie die Hässlichkeit vonsubstringFromIndex
und verbergensubstringToIndex
:Wie
dropFirst
unddropLast
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
:oder Sie können
_
den Funktionsdefinitionen einen Unterstrich hinzufügen , um den Parameternamen zu unterdrücken:quelle
Swift 2.2
Swift 3.0
Swift 3.2
Swift 4
quelle
Gehen Sie in Swift 2 folgendermaßen vor:
Ich empfehle https://www.mikeash.com/pyblog/friday-qa-2015-11-06-why-is-swifts-string-api-so-hard.html , um ein Verständnis für Swift-Strings zu erhalten.
quelle
Hängt davon ab, wie das Endergebnis aussehen soll (mutieren oder nicht mutieren).
Ab Swift 4.1:
Mutieren:
Nicht mutierend:
Anmerkungen:
nonmutating
Klarheit halber habe ich dem Beispiel einen zusätzlichen Schritt hinzugefügt. Subjektiv wäre die Kombination der letzten beiden Schritte prägnanter.dropFirst
scheint mir etwas seltsam, denn wenn ich die Swift API Design Guidelines richtig verstehe ,dropFirst
sollte es wirklich so sein,dropingFirst
weil es nicht mutiert. Nur ein Gedanke :).quelle
droppingFirst
- sie haben es vermasselt!Was ist damit?
Dies setzt natürlich voraus, dass Ihre Zeichenfolge veränderbar ist. Es gibt das Zeichen zurück, das entfernt wurde, ändert jedoch die ursprüngliche Zeichenfolge.
quelle
Die vorherigen Antworten sind ziemlich gut, aber ab heute denke ich, dass dies der prägnanteste Weg ist, um das erste Zeichen aus einer Zeichenfolge in Swift 4 zu entfernen :
quelle
Ich weiß nichts prägnanteres von der Stange, aber Sie könnten leicht ein Präfix implementieren
++
, z.Danach können Sie es nach Herzenslust sehr prägnant verwenden:
quelle
Verwenden Sie in Swift 2 diese String-Erweiterung:
quelle
quelle
So entfernen Sie das erste Zeichen aus der Zeichenfolge
quelle
Hier ist eine Swift4- Version der
chopPrefix
ErweiterungchopSuffix
zum Absturz , die der Community überlassen bleibt ...quelle
Swift3
quelle