Tracks
/
Swift
Swift
/
Übungen
/
Cals eigener Schilder-Shop
Cals eigener Schilder-Shop

Cals eigener Schilder-Shop

Lernübung

Einführung

Eine Zeichenkette stellt Textdaten dar. In Swift ist ein String eine geordnete Sammlung von Character-Werten, wobei jedes Zeichen ein Unicode-Zeichen darstellt.

Du erstellst eine Zeichenkette mit einem String-Literal, also einer Folge von Zeichen, die von doppelten Anführungszeichen (") umschlossen ist. Für mehrzeilige Zeichenketten verwendest du drei doppelte Anführungszeichen ("""):

let hello: String = "Hello, World!"

let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""

Zeichenketten in Swift lassen sich nahtlos mit der Klasse NSString des Foundation-Frameworks verbinden und bieten so Zugriff auf umfangreiche Möglichkeiten der Textverarbeitung.

Zeichen

Ein Character stellt einen einzelnen erweiterten Graphemcluster dar, also ein für Menschen lesbares Zeichen, das aus einem oder mehreren Unicode-Skalarwerten besteht. Ein Unicode-Skalarwert ist ein 21-Bit-Codepunkt im Bereich von U+0000 bis einschließlich U+D7FF oder von U+E000 bis einschließlich U+10FFFF.

let aChar: Character = "A"

Typinferenz

Wenn du ein String-Literal schreibst, leitet Swift automatisch den Typ String ab. Um ein einzelnes Zeichen als Character zu speichern, musst du eine explizite Typannotation angeben:

let aString = "A"        // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar))   // Prints Character

// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'

Verkettung

Du kannst Zeichenketten mit dem Additionsoperator (+) aneinanderfügen:

print("honey" + "comb")
// Prints "honeycomb"

Du kannst ein Character nicht direkt mit + an einen String verketten, ohne das Zeichen zuvor in eine Zeichenkette umzuwandeln. Du kannst jedoch die Methode append(_:) verwenden, um entweder eine Zeichenkette oder ein Zeichen direkt an eine veränderbare Zeichenkette anzuhängen:

var greeting = "Hello"
let world = ", world"
let period: Character = "."

greeting.append(world)
print(greeting) // Prints "Hello, world"

greeting.append(period)
print(greeting) // Prints "Hello, world."

String-Interpolation

Mit der String-Interpolation kannst du eine Zeichenkette aufbauen, indem du Konstanten, Variablen, Literale und Ausdrücke in String-Literale einbettest. Setze jeden Ausdruck in runde Klammern und stelle einen Backslash davor (\( ... )):

let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"

Eigenschaften von Zeichenketten und Zeichen

Zeichenketten und Zeichen bieten mehrere Eigenschaften, mit denen du ihren Inhalt untersuchen kannst.

Eigenschaften von Zeichenketten

Häufige Eigenschaften von Zeichenketten sind:

Eigenschaft Beschreibung Beispiel
isEmpty Gibt true zurück, wenn die Zeichenkette keine Zeichen enthält "Hello".isEmpty ergibt false
count Gibt die Anzahl der Zeichen in der Zeichenkette zurück "Hello".count ergibt 5

Eine vollständige Liste der Eigenschaften findest du in der Apple-Dokumentation zu String.

Eigenschaften von Zeichen

Häufige Eigenschaften von Zeichen sind:

Eigenschaft Beschreibung Beispiel
isLowercase Gibt true zurück, wenn das Zeichen ein Kleinbuchstabe ist "a".isLowercase ergibt true
isUppercase Gibt true zurück, wenn das Zeichen ein Großbuchstabe ist "A".isUppercase ergibt true
isNumber Gibt true zurück, wenn das Zeichen eine Ziffer ist "1".isNumber ergibt true
isWhitespace Gibt true zurück, wenn das Zeichen Leerraum ist " ".isWhitespace ergibt true

Eine vollständige Liste der Eigenschaften findest du in der Apple-Dokumentation zu Character.

Typkonvertierung

Du kannst andere Typen in Zeichenketten umwandeln, indem du den Initialisierer String(_:) verwendest. Er unterstützt Standardtypen wie Int, Double und Character:

let charX: Character = "x"
print(String(charX))     // Prints "x"
print(String(110))       // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"

Sonderzeichen

String-Literale in Swift unterstützen mehrere Escape-Sequenzen für Sonderzeichen:

Sequenz Beschreibung
\0 Nullzeichen
\\ Backslash
\t Horizontaler Tabulator
\n Zeilenvorschub (Newline)
\r Wagenrücklauf
\' Einfaches Anführungszeichen
\" Doppeltes Anführungszeichen
\u{n} Beliebiger Unicode-Skalarwert (hexadezimal)
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.

let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖

Anleitung

In dieser Übung schreibst du Code, der einem Schilderunternehmen dabei hilft, individuelle Nachrichten für seine Schilder zu erstellen.

1. Erstelle eine Reihe nützlicher Strings

Definiere die folgenden konstanten Strings, die zum Erstellen von Schildern verwendet werden:

  • birthday: Enthält den Wert „Birthday“
  • valentine: Enthält den Wert „Valentine's Day“
  • anniversary: Enthält den String „Anniversary“

2. Erstelle eine Reihe nützlicher Zeichen

Definiere die folgenden konstanten Zeichen, die zum Erstellen von Schildern verwendet werden:

  • space: Enthält den Wert „ “ (ein einzelnes Leerzeichen)
  • exclamation: Enthält den Wert „!“

3. Kombiniere Phrasen zu Nachrichten

Implementiere die Funktion buildSign(for:name:). Sie nimmt das Argument for entgegen, das einen der drei Strings enthält, die du in der ersten Aufgabe definiert hast, und das Argument name, einen String mit dem Namen der Person, für die das Schild bestimmt ist. Verwende Konkatenation, um die Nachricht für das Schild zusammenzusetzen, und denk daran, die bereits definierten Konstanten wiederzuverwenden. Die Funktion soll die Nachricht des Schilds als String zurückgeben.

buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"

buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"

4. Erstelle ein Abschlussschild

Implementiere die Funktion graduationFor(name:year:). Sie nimmt das Argument name entgegen, einen String mit dem Namen der Person, für die das Schild bestimmt ist, und das Argument year, eine Ganzzahl mit dem Jahr, in dem die Person ihren Abschluss macht. Verwende Template-Strings, um die Nachricht für das Schild aufzubauen. Die Funktion soll die Nachricht des Schilds als String zurückgeben.

graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"

5. Berechne die Kosten für ein Schild

Implementiere die Funktion costOf(sign:). Sie nimmt das Argument sign entgegen, einen String mit der Nachricht für das Schild. Das Schild hat einen Grundpreis von 20 in der gegebenen Währung. Zusätzlich kostet jeder Buchstabe 2 (Leerzeichen werden in die Berechnung einbezogen). Die Funktion soll die Kosten des Schilds als Ganzzahl zurückgeben.

costOf(sign: "Happy Birthday Grandma!")
// returns 66
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Swift Exercism

Bereit, mit Cals eigener Schilder-Shop zu starten?

Melde dich bei Exercism an, um Swift mit 35 Konzepte116 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.