Чтение бинарного файла в swift - PullRequest
0 голосов
/ 29 сентября 2019

Xcode Version 11.0 (11A420a)

        var byteArray: [UInt8] = []
        do {
            let data:NSData = try NSData(contentsOfFile: path)
            print("Data Len: " + String(data.length))
            var buffer = [UInt8](
                unsafeUninitializedCapacity: data.length,
                initializingWith: {_,_ in}
            )
            print("Buffer Len: " + String(buffer.count))
            data.getBytes(&buffer, length: data.length)
            byteArray = buffer
            print("Array Len: " + String(byteArray.count))
        } catch {
            print("Load Error")
            addChild(ErrorViewController())
            return
        }

Это не ошибка, но возвращает результат длины 0. Вывод на печать:

Длина данных: 3020

Размер буфера: 0

Размер массива: 0

Что яделать неправильно?

1 Ответ

1 голос
/ 29 сентября 2019

Этот

var buffer = [UInt8](
    unsafeUninitializedCapacity: data.length,
    initializingWith: {_,_ in}
)

ничего не делает, потому что замыкание ничего не делает (оно должно инициализировать хранилище элементов, на которое указывает первый аргумент замыкания, а затем установить второй аргумент замыкания initializedCount). И это

data.getBytes(&buffer, length: data.length)

ничего не делает, потому что buffer пусто.

Сказав это, вы можете просто прочитать файл в Data с помощью

let data = try NSData(contentsOfFile: path) as Data
// or better:
let data = try Data(contentsOf: URL(fileURLWithPath: path))

и затем работайте со значением Data. Если вам действительно нужно скопировать данные в массив, вы можете сделать это с помощью

let byteArray = Array(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...