Sto affettando un array di stringhe e impostandolo su una [String]
variabile, ma il controllo del tipo si lamenta. È un possibile bug del compilatore?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Risposte:
La sottoscrizione di un array con un intervallo non restituisce un array, ma una sezione. Tuttavia, puoi creare un array da quella slice.
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
ti dà il più utileerror: 'Slice<String>' is not convertible to '[String]'
Un altro modo per farlo in un posto è combinare la dichiarazione delle variabili let someTags: [String]
e map(_:)
, che si trasformerà ArraySlice<String>
in [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
Un altro modo conveniente per convertire un ArraySlice
in Array
è questo:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
Non è perfetto perché un altro sviluppatore (o te stesso) che lo guarda in seguito potrebbe non capirne lo scopo. La buona notizia è che se lo sviluppatore (forse tu) rimuove il + []
, verrà immediatamente riscontrato un errore del compilatore, che si spera chiarirà il suo scopo.
Basta lanciare la fetta come un array quando viene creata. Mantenere il tuo array come un array senza dover usare una variabile intermedia. Funziona alla grande quando si utilizzano i tipi Codable.
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
documentato? Inoltre, il messaggio di errore non è corretto e vieneSlice
visualizzato come [String] nel playground. Quindi sembra che ci siano due errori del compilatore e documentazione mancante.