web-dev-qa-db-ja.com

Swiftでは、配列[文字列]スライシングの戻り値の型は[文字列]ではないようです

文字列の配列をスライスし、それを[String]変数に設定していますが、型チェッカーは不満を言っています。コンパイラのバグの可能性はありますか?

var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]

screenshot

83
Liron Shapira

範囲で配列に添え字を付けると、配列ではなくスライスが返されます。ただし、そのスライスから配列を作成できます。

var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
162
Connor
var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"
14
zaph

ArraySliceArrayに変換するもう1つの便利な方法は次のとおりです。

var tags = ["this", "is", "cool"] var someTags: [String] = tags[1..<3] + []

後でそれを見る別の開発者(またはあなた自身)がその目的を理解しないかもしれないので、それは完全ではありません。良いニュースは、その開発者(おそらくあなた)が+ []すぐにコンパイラエラーが発生するため、目的を明確にすることが望まれます。

0

これを実行して、スライスの新しい配列を取得することもできます。

var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0])  //prints ["is", "cool"]
0
Steve Rosenberg

1つの場所でそれを行う別の方法は、変数宣言_let someTags: [String]_と map(_:) を組み合わせて、_ArraySlice<String>_を_[String]_に変換することです。

_let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
_
0
pacification