Я нарезаю массив строк и устанавливаю его в переменную [String]
, но проверяет тип проверки. Это возможная ошибка компилятора?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Я нарезаю массив строк и устанавливаю его в переменную [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]"
Вы также можете сделать это, чтобы получить новый массив среза:
var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0]) //prints ["is", "cool"]
Другой способ сделать это в одном месте - объявить переменную переменные let someTags: [String]
и map(_:)
, которые преобразуют ArraySlice<String>
в [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["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])