ArraySlice-indexets innebörd
Förstå varför slice-index behåller de ursprungliga positionerna.
ArraySlice-indexets innebörd är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Slices behåller de ursprungliga indexen
En viktig överraskning är att en ArraySlice inte indexeras om från noll. Den behåller samma index som i den överordnade arrayen.
let arr = [10, 20, 30, 40, 50]
let slice = arr[2..<5]
print(slice.startIndex)
print(slice.endIndex)startIndex är inte alltid noll
En slices startIndex är lika med den nedre gräns som användes när den skapades. För arr[2..<5] är startindexet 2.
let arr = [1, 2, 3, 4, 5, 6]
let slice = arr[3..<6]
print("start:", slice.startIndex)
print("first value:", slice[slice.startIndex])Använd subscript på en slice
Eftersom indexen bevaras måste Ni använda slicens egna index. Om Ni använder slice[0] på en slice som börjar på index 2 uppstår en krasch under körning.
let arr = [100, 200, 300, 400]
let slice = arr[2..<4]
print(slice[2])
print(slice[3])Använd startIndex säkert
För att hämta det första elementet oavsett var slicen börjar använder Ni slice.first eller slice[slice.startIndex].
let arr = [5, 6, 7, 8, 9]
let slice = arr[2..<5]
print(slice.first ?? -1)
print(slice[slice.startIndex])endIndex är ett efter det sista
Precis som för arrayer pekar endIndex på positionen direkt efter det sista giltiga elementet. Det är ogiltigt att använda subscript på endIndex.
let arr = [11, 22, 33, 44]
let slice = arr[1..<3]
print("endIndex:", slice.endIndex)
print("last valid:", slice[slice.endIndex - 1])Att räkna jämfört med att indexera
En slices count är antalet element, vilket kan skilja sig från dess endIndex. Anta aldrig att count är lika med det sista indexet.
let arr = [0, 1, 2, 3, 4, 5]
let slice = arr[3..<6]
print("count:", slice.count)
print("startIndex:", slice.startIndex)Egenskapen indices
Använd egenskapen indices för att på ett säkert sätt iterera över en slices giltiga indexintervall.
let arr = [10, 20, 30, 40, 50]
let slice = arr[1..<4]
for i in slice.indices {
print(i, slice[i])
}Varför indexen bevaras
Genom att indexen bevaras kan Ni koppla en position i slicen till den ursprungliga arrayen utan extra bokföring. Indexet Ni hittar är även giltigt i den överordnade arrayen.
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 återställer till noll
Om Ni vill ha nollbaserade positioner använder Ni enumerated(). Den ger offsetvärden som börjar på 0 oavsett slicens startIndex.
let arr = [9, 8, 7, 6, 5]
let slice = arr[2..<5]
for (offset, value) in slice.enumerated() {
print(offset, value)
}Avstånd från början
För att beräkna en nollbaserad offset från ett index använder Ni 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])Ett vanligt fel
Att glömma att slices behåller den överordnade arrayens index är ett av de vanligaste felen i Swift. Föredra alltid first, enumerated() eller startIndex framför ett hårdkodat 0.
let arr = [100, 200, 300, 400, 500]
let slice = arr[3..<5]
// Safe: use first, not slice[0]
print(slice.first ?? 0)Snabbkontroll
Resonera kring index i slices.
Sammanfattning
En ArraySlice behåller den överordnade arrayens index: dess startIndex är den nedre gränsen, inte noll. Använd first, startIndex, indices eller enumerated() för säker åtkomst, aldrig ett hårdkodat 0.
let slice = [5, 6, 7, 8, 9][3..<5]
print(slice.startIndex, slice.first ?? -1)Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”ArraySlice-indexets innebörd” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”ArraySlice-indexets innebörd”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”ArraySlice-indexets innebörd”?
Förstå varför slice-index behåller de ursprungliga positionerna. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”ArraySlice-indexets innebörd”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Skapa slices med intervall
- ArraySlice-indexets innebörd
- Konvertera slices tillbaka till arrayer
- prefix, suffix och dropFirst