0Pricing
Swift Academy · Lekcja

Semantyka indeksów ArraySlice

Poznanie, dlaczego indeksy wycinka zachowują oryginalne pozycje.

Semantyka indeksów ArraySlice to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. 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 4 lekcji w sumie.

Wycinki zachowują oryginalne indeksy

Ważna i nieoczywista kwestia: ArraySlice nie rozpoczyna indeksowania od zera. Zachowuje te same indeksy, które miał w nadrzędnej tablicy.

let arr = [10, 20, 30, 40, 50]
let slice = arr[2..<5]
print(slice.startIndex)
print(slice.endIndex)

startIndex nie zawsze wynosi zero

Właściwość startIndex wycinka jest równa dolnej granicy użytej do jego utworzenia. Dla arr[2..<5] indeks początkowy wynosi 2.

let arr = [1, 2, 3, 4, 5, 6]
let slice = arr[3..<6]
print("start:", slice.startIndex)
print("first value:", slice[slice.startIndex])

Indeksowanie wycinka

Ponieważ indeksy są zachowywane, należy używać własnych indeksów wycinka. Dostęp do slice[0] w wycinku rozpoczynającym się od indeksu 2 spowoduje awarię w czasie wykonywania.

let arr = [100, 200, 300, 400]
let slice = arr[2..<4]
print(slice[2])
print(slice[3])

Bezpieczne używanie startIndex

Aby pobrać pierwszy element niezależnie od miejsca rozpoczęcia wycinka, należy użyć slice.first lub slice[slice.startIndex].

let arr = [5, 6, 7, 8, 9]
let slice = arr[2..<5]
print(slice.first ?? -1)
print(slice[slice.startIndex])

endIndex wskazuje pozycję za ostatnim elementem

Podobnie jak w tablicach, endIndex wskazuje pozycję o jeden większą od ostatniego prawidłowego elementu. Indeksowanie za pomocą endIndex jest nieprawidłowe.

let arr = [11, 22, 33, 44]
let slice = arr[1..<3]
print("endIndex:", slice.endIndex)
print("last valid:", slice[slice.endIndex - 1])

Zliczanie a indeksowanie

Właściwość count wycinka oznacza liczbę elementów, która może różnić się od jego endIndex. Nie należy zakładać, że count jest równe ostatniemu indeksowi.

let arr = [0, 1, 2, 3, 4, 5]
let slice = arr[3..<6]
print("count:", slice.count)
print("startIndex:", slice.startIndex)

Właściwość indices

Właściwość indices służy do bezpiecznego iterowania po prawidłowym zakresie indeksów wycinka.

let arr = [10, 20, 30, 40, 50]
let slice = arr[1..<4]
for i in slice.indices {
    print(i, slice[i])
}

Dlaczego indeksy są zachowywane

Zachowanie indeksów pozwala odwzorować pozycję w wycinku z powrotem na oryginalną tablicę bez dodatkowego śledzenia. Znaleziony indeks jest również prawidłowy w tablicy nadrzędnej.

let arr = ["a", "b", "c", "d", "e"]
let slice = arr[2..<5]
if let idx = slice.firstIndex(of: "d") {
    print("found at parent index:", idx)
    print("parent has:", arr[idx])
}

Enumerate resetuje indeksowanie do zera

Jeśli potrzebne są pozycje liczone od zera, należy użyć enumerated(). Funkcja zwraca przesunięcia rozpoczynające się od 0 niezależnie od wartości startIndex wycinka.

let arr = [9, 8, 7, 6, 5]
let slice = arr[2..<5]
for (offset, value) in slice.enumerated() {
    print(offset, value)
}

Odległość od początku

Aby obliczyć przesunięcie liczone od zera na podstawie indeksu, należy użyć distance(from:to:).

let arr = [1, 2, 3, 4, 5]
let slice = arr[2..<5]
let idx = slice.startIndex + 1
let offset = slice.distance(from: slice.startIndex, to: idx)
print("offset:", offset, "value:", slice[idx])

Częsty błąd

Zapominanie o tym, że wycinki zachowują indeksy nadrzędne, jest jednym z najczęstszych błędów w Swift. Zamiast zakodowanej na stałe wartości 0 należy zawsze preferować first, enumerated() lub startIndex.

let arr = [100, 200, 300, 400, 500]
let slice = arr[3..<5]
// Safe: use first, not slice[0]
print(slice.first ?? 0)

Szybkie sprawdzenie

Proszę przeanalizować indeksy wycinka.

Podsumowanie

ArraySlice zachowuje indeksy tablicy nadrzędnej: jego startIndex jest dolną granicą, a nie zerem. Do bezpiecznego dostępu należy używać first, startIndex, indices lub enumerated(), a nigdy zakodowanej na stałe wartości 0.

let slice = [5, 6, 7, 8, 9][3..<5]
print(slice.startIndex, slice.first ?? -1)

Często zadawane pytania

Czy lekcja „Semantyka indeksów ArraySlice” jest bezpłatna?

Tak — pełny tekst „Semantyka indeksów ArraySlice” 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 4 lekcji w sumie.

Co nauczysz się w „Semantyka indeksów ArraySlice”?

Poznanie, dlaczego indeksy wycinka zachowują oryginalne pozycje. Ć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 4.

Ile czasu zajmuje lekcja „Semantyka indeksów ArraySlice”?

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. Tworzenie wycinków za pomocą zakresów
  2. Semantyka indeksów ArraySlice
  3. Konwertowanie wycinków z powrotem na tablice
  4. prefix, suffix i dropFirst
← Powrót do Swift Academy