Я загружаю строку из байтового массива в Swift, используя следующий код
let bytes = data[position...position + length]
guard let let dateString = String(bytes: bytes, encoding: .utf8)
else {return}
Это дает мне правильную строку, например "20160714"
.
Использование DateFormatter
Затем я пытаюсь проанализировать дату из строки следующим образом:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYYMMdd"
let date = dateFormatter.date(from: dateString)
Этот должен работать, но date
всегда nil
. Когда я пытаюсь сделать то же самое на игровой площадке со строковым литералом (let dateString = "20160714"
), он работает как положено, я думаю, что это как-то связано с кодировкой.
Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: я пробовал как YYYY, так и yyyy в течение года, оба возвращают nil
Стоит также отметить, что байтовый массив получается при загрузке файла в память с использованием
guard let data = try? NSData(contentsOfFile: urlString,
options: .alwaysMapped)
else {fatalError("Invalid file")}
. по запросу @vadian печать Data(bytes) as NSData
в консоли дает следующий вывод
{length = 8, bytes = 0x3230313630373134}