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
- Tworzenie wycinków za pomocą zakresów
- Semantyka indeksów ArraySlice
- Konwertowanie wycinków z powrotem na tablice
- prefix, suffix i dropFirst