Subscripts und benutzerdefinierte Indizes – Vertiefung
Definieren Sie Subscripts mit get / set , akzeptieren Sie mehrere Parameter (z. B. für eine 2D-Matrix) und verwenden Sie benutzerdefinierte Indextypen (Enums) für lesbare APIs.
Subscripts und benutzerdefinierte Indizes – Vertiefung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.
Was sind Subscripts?
Subscripts ermöglichen es, Instanzen wie Arrays zu indizieren. Sie können:
- Nur-Lese- oder Lese-/Schreibzugriff bereitstellen
- Mehrere Parameter akzeptieren, zum Beispiel Zeile und Spalte
- Für mehr Klarheit benutzerdefinierte Indizes wie Enums verwenden
Nur-Lese-Subscript
Ein Subscript kann nur lesbar sein, indem er einen Wert zurückgibt, ohne set.
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int { multiplier * index } // read-only
}
let t = TimesTable(multiplier: 3)
print(t[4]) // 12Lesen und Schreiben mit get/set
Fügen Sie get/set für Lese-/Schreibzugriff hinzu. Sichern Sie Indizes ab, um Abstürze zu vermeiden.
struct SafeArray<T> {
private var storage: [T]
init(_ xs: [T]) { self.storage = xs }
subscript(i: Int) -> T? {
get { (0..<storage.count).contains(i) ? storage[i] : nil }
set {
guard let v = newValue, (0..<storage.count).contains(i) else { return }
storage[i] = v
}
}
}
var s = SafeArray([10,20,30])
print(s[1] ?? -1) // 20
s[1] = 99
print(s[1] ?? -1) // 99
s[5] = 7 // ignored (out of range)2D-Indexierung
Subscripts können mehrere Parameter annehmen und zur besseren Verständlichkeit Bezeichnungen verwenden, zum Beispiel row/col.
struct Matrix {
let rows: Int, cols: Int
private var grid: [Int]
init(_ r: Int, _ c: Int, fill: Int = 0) {
rows = r; cols = c; grid = Array(repeating: fill, count: r * c)
}
private func valid(_ r: Int, _ c: Int) -> Bool { r >= 0 && r < rows && c >= 0 && c < cols }
subscript(row r: Int, col c: Int) -> Int {
get { precondition(valid(r,c), "Index out of range"); return grid[r*cols + c] }
set { precondition(valid(r,c), "Index out of range"); grid[r*cols + c] = newValue }
}
}
var m = Matrix(2, 3)
m[row: 0, col: 1] = 5
print(m[row: 0, col: 1]) // 5Benutzerdefinierter Index (Enum)
Verwenden Sie benutzerdefinierte Indizes, um die Absicht eindeutig auszudrücken: Ein Enum kann auf den Speicher abbilden und gleichzeitig eine ausdrucksstarke API ermöglichen.
enum Day: Int, CaseIterable { case mon = 0, tue, wed, thu, fri, sat, sun }
struct Week {
private var tasks = Array(repeating: "—", count: Day.allCases.count)
subscript(day: Day) -> String {
get { tasks[day.rawValue] }
set { tasks[day.rawValue] = newValue }
}
}
var w = Week()
w[.wed] = "Ship"
print(w[.wed])Designtipps
Tipps:
- Bevorzugen Sie Subscripts für den Elementzugriff und verwenden Sie Methoden für Aktionen.
- Validieren Sie Indizes, etwa mit assert/precondition oder sicheren Optionals.
- Benennen Sie Parameter für den Zugriff auf mehrere Achsen.
- Halten Sie Subscripts schnell und vorhersehbar.
Deklaration für Lese-/Schreibzugriff
Kurzer Check: Welche Variante deklariert einen Subscript mit Lese-/Schreibzugriff?
Zusammenfassung
Zusammenfassung: Erstellen Sie Nur-Lese- und Lese-/Schreib-Subscripts, akzeptieren Sie mehrere Parameter wie bei Matrizen und bevorzugen Sie zur besseren Lesbarkeit und Sicherheit benutzerdefinierte Indizes wie Enums.
Häufig gestellte Fragen
Ist die Lektion „Subscripts und benutzerdefinierte Indizes – Vertiefung“ kostenlos?
Ja — der vollständige Text von „Subscripts und benutzerdefinierte Indizes – Vertiefung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „Subscripts und benutzerdefinierte Indizes – Vertiefung“?
Definieren Sie Subscripts mit get / set , akzeptieren Sie mehrere Parameter (z. B. für eine 2D-Matrix) und verwenden Sie benutzerdefinierte Indextypen (Enums) für lesbare APIs. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.
Wie lange dauert die Lektion „Subscripts und benutzerdefinierte Indizes – Vertiefung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Operatorüberladung und Precedence-Groups
- Subscripts und benutzerdefinierte Indizes – Vertiefung
- Ableitungen für Hashable/Equatable/Comparable