Estoy cortando una matriz de cadenas y estableciendo eso en una [String]
variable, pero el verificador de tipos se queja. ¿Es un posible error del compilador?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Respuestas:
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)
var someTags = tags[1..<3] var someTagsArray: [String] = someTags
le da más ayudaerror: 'Slice<String>' is not convertible to '[String]'
Otra forma de hacerlo en un solo lugar es combinar la declaración de variable let someTags: [String]
y map(_:)
eso se transformará ArraySlice<String>
en [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
Otra forma conveniente de convertir un ArraySlice
a Array
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.
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])
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.