文字列の配列をスライスして[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 someTags = tags[1..<3] var someTagsArray: [String] = someTags
、より便利になりますerror: 'Slice<String>' is not convertible to '[String]'
これを実行して、スライスの新しい配列を取得することもできます。
var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0]) //prints ["is", "cool"]
変換するもう一つの便利な方法ArraySlice
にはArray
、この次のとおりです。
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
後でそれを見る別の開発者(またはあなた自身)がその目的を理解しないかもしれないので、それは完璧ではありません。幸いなことに、その開発者(おそらくあなた)が削除する+ []
と、すぐにコンパイラエラーが発生し、その目的が明確になることを願っています。
作成時にスライスを配列としてキャストするだけです。中間変数を使用せずに配列を配列として保持します。これは、Codableタイプを使用する場合に最適です。
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
文書化されていますか?また、エラーメッセージが正しくなくSlice
、遊び場に[String]として表示されます。したがって、2つのコンパイラエラーとドキュメントの欠落があるようです。