Strings in Swift

Für Zeichenketten (Strings) gibt es in Swift den Datentyp String.

let myString: String = "Hello World!"

Die Zeichen werden in doppelte Anführungszeichen gesetzt. Die Angabe des Typs String ist nicht zwangsläufig erforderlich. Swift versucht dann automatisch den richtigen Datentyp zu ermitteln. Dies wird als type inference bezeichnet.

String und Character

Es handelt sich bei einem String um eine Sammlung von einzelnen Zeichen. Ein Zeichen (Character) ist ebenfalls ein Datentyp in Swift. Möchte man anstelle eines String-Typs einen Character-Typ deklarieren, muss dies explizit angegeben werden. Einzelne Zeichen werden hierbei ebenfalls in doppelte Anführungszeichen gesetzt.

let myString = "Hello World!" // String
let myCharacter: Character = "A" // Character

Ein String kann aus einem “Character-Array” erzeugt werden:

let myCharacterArray: [Character] = ["w", "o", "r", "d"]
let myString = String(myCharacterArray)
print(myString) // -> "word"

Leere Strings erzeugen

Für die Erzeugung eines leeren Strings existieren in Swift zwei Möglichkeiten. Zum einen kann einfach ein leeres String-Literal verwendet werden:

var myString = ""

Zum anderen kann ein parameterloser String erzeugt werden (initializer syntax):

var myString = String()

Ob ein leerer String vorliegt, kann mit isEmpty ermittelt werden:

if myString.isEmpty 
    // do something
}

Länge einer Zeichenkette ermitteln

Es gibt in Swift für den Datentyp String keine length-Eigenschaft. Soll die Länge einer Zeichenkette ermittelt werden, kann dies mit count durchgeführt werden.

let myString = "Bochum"
print(myString.count) // -> 6

Strings zusammensetzen

Verschiedene Strings können mit dem +-Operator oder +=-Operator zu einem String zusammengesetzt werden:

var myString = "Hello "
myString += "World"
print(myString) // -> Hello World

Im Beispiel ist das Schlüsselwort var vorangestellt. Wird stattdessen let verwendet, dann ist die Variable “myString” nicht veränderbar; “myString” wäre dann eine Konstante.

Strings vergleichen

Strings können durch == und != miteinander verglichen werden.

var firstString = "Hello World"
var secondString = "Hello World"
var comparison = (firstString == secondString) // -> true

Das Vergleichen mit dem Vergleichsoperator == ist möglich, da in Swift Strings als Struktur (struct) implementiert sind. Es handelt es also bei einem String um einen Wertetyp (value type).

String Interpolation

In Swift können Werte auf einfache Weise in Strings umgewandelt werden:

var age = 32
print("Sein Alter beträgt \(age) Jahre.")
// -> Sein Alter beträgt 32 Jahre.

Dieser Vorgang wird als Interpolation bezeichnet. Darunter versteht man die Erzeugung eines (neuen) Strings aus Variablen oder Konstanten, indem deren Werte in ein String-Literal eingefügt werden. Im obigen Beispiel wurde die Variable age in so ein Literal integriert. Die Variable muss dabei in Klammern einem Backslash folgen, hier also \(age).

Formatierte Strings

So einfach die Umwandlung in eine Zeichenkette mit der String Interpolation auch ist, es gibt Fälle, in denen man sich mehr Einfluss auf das Ausgabeformat wünscht. Hier helfen format strings weiter. Anstelle von

var weight = 86.17
print("\(weight)")

könnte man auch

let output = String(format: "%.1f", weight)
// -> 86.2

schreiben.

In dem Code wird an die Stelle des durch ein %-Zeichen gekennzeichneten Platzhalters der (formatierte) Wert der Variablen weight eingesetzt.

Platzhalter beginnen immer mit einem Prozentzeichen, gefolgt von der Angabe des Typs:

  • %f steht für eine Dezimalzahl
  • %d steht für Werte vom Typ Integer
  • %@ steht für Objekte

Im obigen Beispiel wird %.1f verwendet, also ein Dezimalzahl-Platzhalter, wobei die 1 kennzeichnet, dass nur eine Nachkommastelle angezeigt werden soll.

Iteration

Über die einzelnen Zeichen eines Strings kann mit einer for-Schleife iteriert werden:

let name = "Marcus"
for char in name {
    print("\(char)")
}

Diese Schleife gibt alle Buchstaben des Namens “Marcus” aus.