87
Inscrever uma matriz com um intervalo não retorna uma matriz, mas uma fatia. Você pode criar uma matriz a partir dessa fatia.
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
Slice
documentado? Além disso, a mensagem de erro está incorreta eSlice
aparece como [String] no playground. Portanto, parece que há dois erros do compilador e documentação ausente.var someTags = tags[1..<3] var someTagsArray: [String] = someTags
será mais útilerror: '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]"
fonte
Você também pode fazer isso para obter uma nova matriz da fatia:
var tags = ["this", "is", "cool"] var someTags = [String]() someTags += tags[1..<3] println(someTags[0]) //prints ["is", "cool"]
fonte
Outra maneira de fazer isso em um lugar é combinar a declaração de variável
let someTags: [String]
emap(_:)
, isso se transformaráArraySlice<String>
em[String]
:let tags = ["this", "is", "cool"] let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
fonte
Outra maneira conveniente de converter um
ArraySlice
paraArray
é esta:var tags = ["this", "is", "cool"] var someTags: [String] = tags[1..<3] + []
Não é perfeito porque outro desenvolvedor (ou você) que olhar para ele mais tarde pode não entender sua finalidade. A boa notícia é que, se esse desenvolvedor (talvez você) remover o,
+ []
ele será imediatamente encontrado com um erro do compilador, o que esperamos esclarecer seu propósito.fonte
Basta lançar a fatia como um Array quando for criada. Manter seu Array como um array sem ter que usar uma variável intermediária. Isso funciona muito bem ao usar tipos codificáveis.
var tags = ["this", "is", "cool"] tags = Array(tags[1..<3])
fonte