Индексы значения Data
(или коллекций в целом) не обязательно начинаются с нуля.A slice делит индексы с исходными данными.Пример:
let buffer = Data(bytes: [1, 2, 3, 4, 5, 6])[2..<4]
print(buffer.count) // 2
print(buffer.indices) // 2..<4
let tmpData = buffer.subdata(in: 0..<2)
// ? Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
Поэтому необходимо учитывать начальный индекс:
let tmpData = buffer[buffer.startIndex ..< buffer.startIndex + 2]
print(tmpData as NSData) // <0304>
или просто использовать префикс :
let tmpData = buffer.prefix(2)
print(tmpData as NSData) // <0304>
Применительно к вашему делу:
let tempData = incomingDataBuffer.prefix(headerSizeInBytes)