87
El subíndice de una matriz con un rango no devuelve una matriz, sino un segmento. Sin embargo, puede crear una matriz a partir de ese segmento.
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
Slice
documentado? Además, el mensaje de error es incorrecto ySlice
aparece como [String] en el patio de recreo. Por tanto, parece que hay dos errores del compilador y falta documentación.var someTags = tags[1..<3] var someTagsArray: [String] = someTags
le da más ayudaerror: 'Slice<String>' is not convertible to '[String]'
var tags = ["this", "is", "cool"] var someTags: [String] = Array(tags[1..<3]) println("someTags: \(someTags)") // "someTags: [is, cool]"
fuente
También puede hacer esto para obtener una nueva matriz del segmento:
var tags = ["this", "is", "cool"] var someTags = [String]() someTags += tags[1..<3] println(someTags[0]) //prints ["is", "cool"]
fuente
Otra forma de hacerlo en un solo lugar es combinar la declaración de variable
let someTags: [String]
ymap(_:)
eso se transformaráArraySlice<String>
en[String]
:let tags = ["this", "is", "cool"] let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
fuente
Otra forma conveniente de convertir un
ArraySlice
aArray
es esta:var tags = ["this", "is", "cool"] var someTags: [String] = tags[1..<3] + []
No es perfecto porque es posible que otro desarrollador (o usted mismo) que lo vea más adelante no entienda su propósito. La buena noticia es que si ese desarrollador (tal vez usted) elimina el,
+ []
se encontrará inmediatamente con un error del compilador, que con suerte aclarará su propósito.fuente
Simplemente transmita el segmento como una matriz cuando se cree. Mantener su matriz como una matriz sin tener que usar una variable intermedia. Esto funciona muy bien cuando se utilizan tipos codificables.
var tags = ["this", "is", "cool"] tags = Array(tags[1..<3])
fuente