# 1 Usando Arraysubscrito com intervalo
Com o Swift 5, quando você escreve…
let newNumbers = numbers[0...position]
… newNumbersNão é do tipo, Array<Int>mas é do tipo ArraySlice<Int>. Isso porque Array's subscript(_:)retorna um ArraySlice<Element>que, de acordo com a Apple, apresenta uma visão sobre o armazenamento de alguns matriz maior.
Além disso, o Swift também fornece Arrayum inicializador chamado init(_:)que nos permite criar uma nova matriz a partir de um sequence(incluindo ArraySlice).
Portanto, você pode usar subscript(_:)with init(_:)para obter uma nova matriz dos primeiros n elementos de uma matriz:
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 Usando Arrayo prefix(_:)método
Swift fornece um prefix(_:)método para tipos que estão em conformidade com o Collectionprotocolo (inclusive Array). prefix(_:)tem a seguinte declaração:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
Retorna uma subsequência, até maxLength de comprimento, contendo os elementos iniciais.
A Apple também declara:
Se o comprimento máximo exceder o número de elementos na coleção, o resultado conterá todos os elementos na coleção.
Portanto, como alternativa ao exemplo anterior, você pode usar o seguinte código para criar uma nova matriz a partir dos primeiros elementos de outra matriz:
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]