# 1 Usando Array
subscrito com intervalo
Com o Swift 5, quando você escreve…
let newNumbers = numbers[0...position]
… newNumbers
Nã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 Array
um 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 Array
o prefix(_:)
método
Swift fornece um prefix(_:)
método para tipos que estão em conformidade com o Collection
protocolo (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]