В Swift, Array [String] slicing возвращаемый тип не кажется [String]


Я нарезаю массив строк и устанавливаю это в [String] переменная, но тип проверки жалуется. Это возможная ошибка компилятора?

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

4 73

4 ответа:

подписка на массив с диапазоном возвращает не массив, а срез. Однако вы можете создать массив из этого среза.

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]"

другой способ сделать это в одном месте совместить объявление переменной let someTags: [String] и map(_:), которые превратят ArraySlice<String> до [String]:

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

вы также можете сделать это, чтобы получить новый массив фрагмент:

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