0Pricing
Swift Academy · Lekcja

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]) // 12

Odczyt 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]) // 5

Niestandardowy 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

  1. Przeciążanie operatorów i grupy priorytetów
  2. Subscripty i niestandardowe indeksy — powtórzenie
  3. Wyprowadzanie Hashable/Equatable/Comparable
← Powrót do Swift Academy