Swift 5: Raw Strings

Strings gehören neben Zahlen wohl zu den am häufigsten eingesetzten Typen in der Programmierung. Dem trägt auch die neue Version 5 von Swift Rechnung, die es erstmals erlaubt, sogenannte Raw Strings zu generieren. Ein solcher Raw String interpretiert Zeichen wie Backslashes oder Anführungszeichen nicht als Befehle, die dazu führen, dass ein String endet oder unterbrochen wird. Stattdessen werden sie als Teil des Strings behandelt, genau wie darin enthaltene Buchstaben und Zahlen auch.

Raw Strings in der Praxis

Bevor ich weiter auf die Hintergründe und Vorteile von Raw Strings eingehe, betrachten wir zunächst einmal, wie man einen Raw String in Swift 5 überhaupt erzeugt. Basis ist das Hashtag-Zeichen #. Es wird vor dem einleitenden Anführungszeichen eines Strings und nach dem abschließenden Anführungszeichen gesetzt. Im Folgenden seht ihr ein simples Beispiel dafür:

let rawString = #"Das ist ein Raw String."#

Dieser Befehl erzeugt eine Konstante vom Typ String, deren Wert dem Text Das ist ein Raw String. entspricht.

Der ein oder andere mag sich fragen, wofür der Einsatz solcher Raw Strings konkret von Nutzen ist. Deutlich wird das bei dem folgenden Beispiel, in dem ein String auf zwei verschiedene Weisen generiert wird: einmal als „herkömmlicher“ String und einmal als Raw String.

let simpleString = "Das ist ein \"normaler\" String."
// Das ist ein "normaler" String.

let rawString = #"Das ist ein "Raw String"."#
// Das ist ein "Raw String".

Beide Strings enthalten Anführungszeichen, die Teil der Zeichenkette sind. Das ist aber bei „herkömmlichen“ Strings ein Problem, schließlich wird deren Deklaration durch ein Anführungszeichen abgeschlossen. Der Inhalt der ersten Konstante simpleString hätte somit eigentlich vor dem Wort normaler geendet.

Eigentlich. Mithilfe des dem Anführungszeichen vorangestellten Backslashes stellen wir sicher, dass eben jenes Anführungszeichen als Teil des Strings interpretiert wird.

Und genau da kommen die Raw Strings ins Spiel. Wir ihr nämlich sehen könnt, brauchen wir in einem solchen die Anführungszeichen nicht mithilfe eines Backslashes oder anderen Zeichens zu maskieren. Tatsächlich können wir in einen Raw String prinzipiell alle Zeichen packen, die wir wollen, ohne dass die möglicherweise als Befehle interpretiert werden. Der String beginnt hierbei mit den Zeichen #" und endet mit "#.

String Interpolation und Raw Strings

Das gilt im Übrigen auch für Funktionen wie die String Interpolation. Mit der herkömmlichen Syntax wird so innerhalb eines Raw Strings nicht der Wert einer Variablen oder Konstanten ausgegeben, sondern der Text eins zu eins so wiedergegeben wie im String definiert:

let myName = "Thomas"
let info = #"Mein Name ist \(myName)."#
// Mein Name ist \(myName).

Hierfür bietet Swift 5 aber eine passende Lösung an. Um den Wert von Variablen und Konstanten mittels String Interpolation in einem Raw String auszugeben, muss zwischen dem Backslash und der geöffneten runden Klammer ein weiterer Hashtag gesetzt werden:

let myName = "Thomas"
let info = #"Mein Name ist \#(myName)."#
// Mein Name ist Thomas.

Mehrzeilige Raw Strings

Auch Strings, die sich über mehrere Zeilen erstrecken, können auf Basis von Raw Strings umgesetzt werden. Hierbei wird ein solcher Raw String mittels #""" eingeleitet und endet mit """#. Wichtig hierbei: Der Text muss immer in einer neuen Zeile beginnen und der Abschluss mittels """# ebenfalls in einer neuen Zeile erfolgen:

let info = #"""
Hallo!
Mein Name ist Thomas.
Und das hier ...
... ist ein mehrzeiliger
RAW STRING!
"""#

// Hallo!
// Mein Name ist Thomas.
// Und das hier ...
// ... ist ein mehrzeiliger
// RAW STRING!

Fazit

In Szenarien, in denen man als Teil eines Strings Zeichen wie Backslashes oder Anführungszeichen einsetzt, die nicht als Befehle, sondern als einfache Symbole interpretiert werden sollen, bietet sich der Einsatz der gezeigten Raw Strings an. Der Inhalt der Zeichenketten wird so deutlich besser lesbar, da der nicht durch den Einsatz von Maskierungen „verschandelt“ wird.

Raw Strings sind im Übrigen aber kein neuer Typ in Swift. Sie sind vom Typ String, genau wie herkömmliche Zeichenketten auch. Lediglich ihre Erstellung erfolgt auf eine alternative Art und Weise.

Euer Thomas


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert