文字列の配列をスライスし、それを[String]
変数に設定していますが、型チェッカーは不満を言っています。コンパイラのバグの可能性はありますか?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
範囲で配列に添え字を付けると、配列ではなくスライスが返されます。ただし、そのスライスから配列を作成できます。
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]"
ArraySlice
をArray
に変換するもう1つの便利な方法は次のとおりです。
var tags = ["this", "is", "cool"] var someTags: [String] = tags[1..<3] + []
後でそれを見る別の開発者(またはあなた自身)がその目的を理解しないかもしれないので、それは完全ではありません。良いニュースは、その開発者(おそらくあなた)が+ []
すぐにコンパイラエラーが発生するため、目的を明確にすることが望まれます。
これを実行して、スライスの新しい配列を取得することもできます。
var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0]) //prints ["is", "cool"]
1つの場所でそれを行う別の方法は、変数宣言_let someTags: [String]
_と map(_:)
を組み合わせて、_ArraySlice<String>
_を_[String]
_に変換することです。
_let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
_