# 1. Używanie Arrayindeksu dolnego z zakresem
Dzięki Swift 5, kiedy piszesz…
let newNumbers = numbers[0...position]
… newNumbersNie jest typu, Array<Int>ale jest typu ArraySlice<Int>. Dzieje się tak dlatego Array, że subscript(_:)zwraca wartość, ArraySlice<Element>która według Apple przedstawia widok na przechowywanie większej tablicy.
Poza tym Swift zapewnia Arrayrównież inicjator o nazwie, init(_:)który pozwala nam utworzyć nową tablicę z sequence(w tym ArraySlice).
Dlatego możesz użyć subscript(_:)with init(_:), aby uzyskać nową tablicę z pierwszych n elementów tablicy:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array[0..<3] // using Range
//let arraySlice = array[0...2] // using ClosedRange also works
//let arraySlice = array[..<3] // using PartialRangeUpTo also works
//let arraySlice = array[...2] // using PartialRangeThrough also works
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
# 2. Korzystanie Arrayz prefix(_:)metody
Swift zapewnia prefix(_:)metodę dla typów zgodnych z Collectionprotokołem (w tym Array). prefix(_:)posiada następującą deklarację:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
Zwraca podsekwencję o maksymalnej długości maxLength, zawierającą elementy początkowe.
Apple stwierdza również:
Jeśli maksymalna długość przekracza liczbę elementów w kolekcji, wynik zawiera wszystkie elementy w kolekcji.
Dlatego, jako alternatywa dla poprzedniego przykładu, możesz użyć poniższego kodu, aby utworzyć nową tablicę z pierwszych elementów innej tablicy:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array.prefix(3)
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]