[Swift] UInt8の配列をバイナリファイルとして保存する

1 min read読了の目安(約700字

方法その1

Dataのwrite()メソッドを使うのが最も簡単です。

import Foundation

let a: [UInt8] = [0x12, 0x34, 0x56, 0x78]
let d = Data(a)

do {
    try d.write(to: URL(string: "file:///path/to/file")!)
} catch {
    print(error)
}

方法その2

FileHandleを使う方法もあります。以下に実装例を示します。

import Foundation

extension Array where Element == UInt8 {
    func write(_ path: String) -> Int {
        if !FileManager.default.createFile(atPath: path, contents: nil, attributes: nil) {
            return -1
        }
        guard let fh = FileHandle(forWritingAtPath: path) else {
            return -2
        }

        fh.seekToEndOfFile()
        fh.write(Data(self))
        fh.closeFile()

        return self.count
    }
}

(補足)ファイルの有無にかかわらず空のファイルを作るためcreateFileを実行しています。