Я не могу понять, почему я получаю ошибку на второй итерации в цикле. Можете ли вы помочь мне понять, откуда эта проблема?Отрицательный ArraySlice: индекс за пределами допустимого диапазона
let NumTracks = 3
let TrackBytes = 2
func readBytes(input: [UInt8]?) {
if let input = input {
var input = input[0..<input.count]
for _ in 0..<NumTracks {
print(input[0..<TrackBytes]) // fatal error: Negative ArraySlice index is out of range
input = input[TrackBytes..<input.count]
}
}
}
let samples = [UInt8]?([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
readBytes(samples)
Существует another test case like this one и нет причин, почему это не происходит сбой, а также.
EDIT
Я не получаю ошибку, когда я использую этот вариант кода (и я до сих пор не знаю, почему):
let NumTracks = 3
let TrackBytes = 2
func readBytes(input: [UInt8]?) {
if let input = input {
var input = input[0..<input.count]
for _ in 0..<NumTracks {
print(input[input.startIndex..<input.startIndex.advancedBy(2)])
input = input[input.startIndex.advancedBy(2)..<input.endIndex]
}
}
}
let samples = [UInt8]?([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
readBytes(samples)
I должен был проверить индексы. Хорошо знать это и немного неожиданно. Благодаря! – Laurent
Я попробовал другое решение, но оно возвращает неверный результат: [0, 1] [2, 3] [2, 3] – Laurent
Ожидаемое [0, 1] [2, 3] [4, 5] – Laurent