Je coupe un tableau de chaînes et le configure en une variable [String]
, mais le vérificateur de type se plaint. Est-ce un bug possible du compilateur?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
La souscription d'un tableau avec une plage ne renvoie pas un tableau, mais une tranche. Vous pouvez cependant créer un tableau à partir de cette tranche.
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"
Un autre moyen pratique de convertir une ArraySlice
en Array
est la suivante:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
Ce n'est pas parfait, car un autre développeur (ou vous-même) qui l'examinera plus tard risque de ne pas comprendre son objectif. La bonne nouvelle est que si ce développeur (peut-être vous) supprime le + []
, il rencontrera immédiatement une erreur du compilateur, ce qui, espérons-le, en clarifiera le but.
Vous pouvez également faire cela pour obtenir un nouveau tableau de la tranche:
var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0]) //prints ["is", "cool"]
Une autre façon de faire cela à un endroit est de combiner la déclaration de variable let someTags: [String]
et map(_:)
, qui transformera ArraySlice<String>
en [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]