Subscripty i niestandardowe indeksy — powtórzenie
Definiujcie subscripty za pomocą get / set , przyjmujcie wiele parametrów (np. macierz 2D) i używajcie niestandardowych typów indeksów (enums) do tworzenia czytelnych API.
Subscripty i niestandardowe indeksy — powtórzenie to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 3 lekcji w sumie.
Czym są subskrypty?
Subskrypty pozwalają uzyskiwać dostęp do instancji za pomocą indeksów, tak jak do tablic. Można:
- udostępniać dostęp tylko do odczytu albo do odczytu i zapisu
- akceptować wiele parametrów (np. wiersz i kolumnę)
- używać niestandardowych indeksów, takich jak wyliczenia, aby zwiększyć czytelność
Subskrypt tylko do odczytu
Subskrypt może być dostępny tylko do odczytu, jeśli zwraca wartość bez elementu set.
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int { multiplier * index } // read-only
}
let t = TimesTable(multiplier: 3)
print(t[4]) // 12Odczyt i zapis za pomocą get/set
Dodaj get/set, aby umożliwić odczyt i zapis. Zabezpiecz indeksy, aby uniknąć awarii.
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)Indeksowanie 2D
Subskrypty mogą przyjmować wiele parametrów i używać etykiet zwiększających czytelność (np. 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]) // 5Niestandardowy indeks (wyliczenie)
Używaj niestandardowych indeksów, aby jasno wyrażać intencję: wyliczenie może mapować wartości na dane, zachowując jednocześnie ekspresyjny interfejs API.
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])Wskazówki projektowe
Wskazówki:
- Preferuj subskrypty w przypadku dostępu do elementów, a metod używaj do wykonywania działań.
- Weryfikuj indeksy (za pomocą assert/precondition albo bezpiecznych wartości opcjonalnych).
- Nazywaj parametry używane przy dostępie do wielu osi.
- Dbaj o to, aby subskrypty były szybkie i działały w przewidywalny sposób.
Deklaracja odczytu i zapisu
Szybkie sprawdzenie: Która deklaracja tworzy subskrypt z dostępem do odczytu i zapisu?
Podsumowanie
Podsumowanie: Twórz subskrypty tylko do odczytu oraz z dostępem do odczytu i zapisu, akceptuj wiele parametrów (tak jak w macierzach) i preferuj niestandardowe indeksy (wyliczenia) ze względu na czytelność i bezpieczeństwo.
Często zadawane pytania
Czy lekcja „Subscripty i niestandardowe indeksy — powtórzenie” jest bezpłatna?
Tak — pełny tekst „Subscripty i niestandardowe indeksy — powtórzenie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Subscripty i niestandardowe indeksy — powtórzenie”?
Definiujcie subscripty za pomocą get / set , przyjmujcie wiele parametrów (np. macierz 2D) i używajcie niestandardowych typów indeksów (enums) do tworzenia czytelnych API. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.
Ile czasu zajmuje lekcja „Subscripty i niestandardowe indeksy — powtórzenie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przeciążanie operatorów i grupy priorytetów
- Subscripty i niestandardowe indeksy — powtórzenie
- Wyprowadzanie Hashable/Equatable/Comparable