Zum Inhalt springen
Swift Anfรคnger 20 min

Dein erstes Swift-Programm

Struktur, print, String-Interpolation und die wichtigsten Swift-Grundbausteine in einem kleinen, echten Programm.

Aktualisiert:
Inhaltsverzeichnis

Dein erstes Swift-Programm

Swift ist angenehm gesprรคchig - auch โ€œHello Worldโ€ laesst sich in eine einzige Zeile packen. Schauen wir uns an, wie das geht und wie du es sinnvoll erweiterst.

Hello, World!

Die klassische Version mit Swift Package Manager (Datei Sources/main.swift):

print("Hallo, Swift!")

Das ist alles. Kein Boilerplate, kein main(), keine Klassen. Swift erlaubt Top-Level Code - ausfuehrbare Anweisungen direkt in der Datei.

swift run
# Hallo, Swift!

Variablen und print

let name = "Anna"
let alter = 28

print("Hallo, \(name)!")
print("Du bist \(alter) Jahre alt.")
  • let = Konstante (kann nicht geaendert werden)
  • var = Variable (veraenderlich)
  • \(...) ist String-Interpolation - viel lesbarer als Konkatenation

Swift bevorzugt let

Eine der ersten Gewohnheiten, die du in Swift lernen wirst: Nutze let standardmaessig, var nur wenn du den Wert wirklich aendern musst. Das macht deinen Code sicherer und besser lesbar.

let pi = 3.14159           // Konstante
var zaehler = 0            // Variable

zaehler += 1
// pi = 3.14 -> FEHLER

Nutzereingabe

print("Wie heisst du? ", terminator: "")
if let name = readLine() {
    print("Hallo, \(name)!")
}
  • readLine() liest eine Zeile von stdin und liefert ein Optional (String?) zurueck
  • if let name = ... entpackt das Optional sicher

Mehr zu Optionals im naechsten Kapitel.

Einfache Berechnungen

let preis = 19.99
let mwstSatz = 0.19
let brutto = preis * (1 + mwstSatz)

print("Brutto: \(brutto)")
// Brutto: 23.7881

// Formatierung
let formatiert = String(format: "%.2f", brutto)
print("Brutto: \(formatiert) EUR")
// Brutto: 23.79 EUR

Funktionen

func addieren(_ a: Int, _ b: Int) -> Int {
    return a + b
}

print(addieren(3, 4)) // 7
  • Der _ unterdrueckt Argument-Labels beim Aufruf
  • Der Rueckgabetyp kommt nach ->

Mit Argument-Labels:

func gruessen(person name: String) {
    print("Hallo, \(name)!")
}

gruessen(person: "Anna")

Argument-Labels machen Swift-Code sehr selbstbeschreibend.

Ein kleines Beispielprogramm

let namen = ["Max", "Anna", "Leo"]

for name in namen where name.count > 3 {
    print("Hallo, \(name)!")
}

// Hallo, Anna!
// Hallo, Leo!

let zahlen = (1...10).filter { $0 % 2 == 0 }
print("Gerade Zahlen: \(zahlen)")
// Gerade Zahlen: [2, 4, 6, 8, 10]

Was passiert hier?

  • for name in namen where ... iteriert mit Filter
  • (1...10) ist eine ClosedRange
  • .filter { $0 % 2 == 0 } nutzt eine Closure - $0 ist das erste Argument

Das Beispiel zeigt, warum Swift-Code oft so kompakt ist.

Semikolons? Nein.

Swift braucht keine Semikolons am Zeilenende. Nur wenn du mehrere Anweisungen auf eine Zeile packen willst:

let a = 1; let b = 2; print(a + b)

Das ist aber ungewohnt und wird selten genutzt.

Kommentare

// Einzeiliger Kommentar

/*
 Mehrzeiliger
 Kommentar
 */

/// Dokumentation fuer die naechste Funktion.
func wichtigeFunktion() { }

Der dreifache Slash /// ist ein Doc-Comment, der in Xcode hilfreiche Popups erzeugt.

Exit-Codes

Innerhalb eines Swift-Programms:

import Foundation

guard CommandLine.arguments.count > 1 else {
    print("Bitte einen Namen uebergeben")
    exit(1)
}

print("Hallo, \(CommandLine.arguments[1])!")
  • CommandLine.arguments ist ein [String] mit den Argumenten
  • guard ... else { ... } ist das Swift-Idiom fuer fruehe Ausstiege

Zusammenfassung

  • Swift erlaubt Top-Level Code - kein main() noetig
  • let und var fuer Konstanten / Variablen, bevorzugt let
  • String-Interpolation mit \(...)
  • readLine(), print() fuer I/O
  • Argument-Labels (_, benannt, benannt anders) fuer selbstdokumentierende Funktionen
  • guard fuer frueh-Ausstiege

Im naechsten Kapitel: Variablen, Datentypen und Optionals - das Herzstueck von Swift.

Zurรผck zum Swift Kurs