Grundtypen
| Typ | Beispiele |
|---|---|
Int, UInt, Int8 ... Int64 | 42, -7 |
Double, Float | 3.14 |
Bool | true, false |
String, Character | "Text", "c" |
Array, Dictionary, Set | [1, 2], ["a": 1], Set([1, 2]) |
| Tupel | (1, "zwei") |
Swift wandelt Typen nie implizit um: Int und Double mischst du nicht ohne Double(x).
import Foundation // für pow, sqrt, round ...
let i = 42
let d = 3.5
print(Double(i) + d, Int(d), Int(3.99), Double(7) / 2, 7 / 2, 7 % 3, -7 % 3)
print(i.isMultiple(of: 2), abs(-5), max(3, 9), min(3, 9), pow(2.0, 10.0))
print(Int.max, Int8.max, UInt8.min)
let (rest, zahl) = (7 % 3, 2 << 3)
print(rest, zahl, 5 & 3, 5 | 3, 5 ^ 3, ~5)
print(10.0 / 3.0, (10.0 / 3.0 * 100).rounded() / 100, 2.5.rounded(), 3.5.rounded(), 3.7.rounded(.down))
print(String(42) + "!", Int("123") ?? 0, Int("abc") ?? -1, Double("2.5")!)
print(i.description, d.description, 1.0 == 1, "5" == String(5))Ausgabe
45.5 3 3 3.5 3 1 -1 true 5 9 3 1024.0 9223372036854775807 127 0 1 16 1 7 6 -6 3.3333333333333335 3.33 3.0 4.0 3.0 42! 123 -1 2.5 42 3.5 true true
Bei Überlauf bricht ein Swift-Programm ab (sicher); für Umlauf gibt es &+, &*, addingReportingOverflow.
Optionals: Wert oder nichts
Eine Variable vom Typ T? (Optional) enthält entweder einen Wert oder nil. Der Compiler zwingt dich, den Fall "kein Wert" zu behandeln.
var maybe: Int? = Int("42")
var keiner: Int? = Int("x")
print(maybe as Any, keiner as Any)
if let zahl = maybe { // sicheres Auspacken
print("Zahl:", zahl)
}
guard let wert = maybe else { fatalError() } // früh verlassen (in Funktionen)
print(wert + 1)
print(keiner ?? 0) // Standardwert
print(maybe!) // Zwangs-Auspacken: stürzt bei nil ab!
print(maybe?.description ?? "nil") // Optional Chaining
print(keiner?.description ?? "nil")
print(maybe.map { $0 * 2 } as Any, keiner.map { $0 * 2 } as Any)
let name: String? = "Mia"
if let n = name, n.count > 2, n.first == "M" { // mehrere Bedingungen
print("Name beginnt mit M:", n)
}
let ersteZahl: Int? = [Int]().first
print(ersteZahl == nil, [3, 4].first as Any)Ausgabe
Optional(42) nil Zahl: 42 43 0 42 42 nil Optional(84) nil Name beginnt mit M: Mia true Optional(3)
Merke: Vermeide!. Besser:if let,guard let,??odermap.
Verzweigungen
let punkte = 78
if punkte >= 90 {
print("sehr gut")
} else if punkte >= 75 {
print("gut")
} else {
print("weiter üben")
}
print(punkte >= 50 ? "bestanden" : "durchgefallen")
let tag = 3
switch tag {
case 1: print("Montag")
case 2, 3, 4: print("Mitte der Woche")
case 5...7: print("Ende der Woche")
default: print("unbekannt")
}
let paar = (2, -2)
switch paar {
case (let a, let b) where a == -b: print("Gegenpaar \(a)")
case (0, _): print("x ist null")
default: print("anderes")
}
let wert: Any = 3.5
switch wert {
case let i as Int: print("Int", i)
case let d as Double: print("Double", d)
case is String: print("String")
default: print("?")
}Ausgabe
gut bestanden Mitte der Woche Gegenpaar 2 Double 3.5
switch muss vollständig sein (alle Fälle abdecken, sonst default) und fällt nicht durch wie in C.
Schleifen
for i in 1...3 { print(i, terminator: " ") }
print()
for i in stride(from: 10, to: 0, by: -4) { print(i, terminator: " ") }
print()
for i in 0..<3 { print(i, terminator: " ") }
print()
for (index, farbe) in ["rot", "grün", "blau"].enumerated() { print("\(index):\(farbe)", terminator: " ") }
print()
for c in "Swift" { print(c, terminator: ".") }
print()
var n = 3
while n > 0 { print(n, terminator: " "); n -= 1 }
print()
repeat { n += 1 } while n < 3
print(n)
äußere: for a in 1...3 {
for b in 1...3 {
if b == 2 { continue äußere }
if a == 3 { break äußere }
print("\(a)\(b)", terminator: " ")
}
}
print()
for x in 1...10 where x % 3 == 0 { print(x, terminator: " ") }
print()Ausgabe
1 2 3 10 6 2 0 1 2 0:rot 1:grün 2:blau S.w.i.f.t. 3 2 1 3 11 21 3 6 9
Merke
- Typen:
Int,Double,Bool,String; keine impliziten Umwandlungen - Optionals
T?:if let,guard let,??,?.,map;!vermeiden switchist vollständig, ohne Durchfallen, mit Mustern undwhere- Schleifen:
for in,stride,while,repeat, Labels - Bereiche
1...3(inklusive) und0..<3(exklusive)
Aufgabe
Schreibe FizzBuzz für 1 bis 30 mit switch.