command = Data() command.append(contentsOf: [0x1b, 0x40]) // 初期化 command.append(contentsOf: [0x1b, 0x45, 0x01]) // 太字オン command.append(contentsOf: [0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64]) // Hello World command.append(contentsOf: [0x0a]) // 改行 try send(data: command) 「プリンターにコマンドを送る」は難しい印象がありますが、簡単なコードで実現できます。なお、一度に書 き込めるデータのサイズに上限があるので、その上限サイズを調べて、データを分割して書き込みます。 // これで上限値が取得できるが、値は適切ではない(値が大きく、印刷失敗する) // 実際のアプリでは、適当な固定値を設定しました let mtuSize = peripheral.maximumWriteValueLength(for: .withResponse) 上記の例は直接コマンドを書いているため、可読性は悪いです。一例ですが、実際にコーディングする際は enum で印刷命令を定義して、それに対応するコマンドを返すと可読性は保たれるでしょう。 enum PrintOrder { case bold(isBold: Bool) func command() -> Data { switch self { case .bold(let isBold): return Data([0x1b, 0x45, isBold ? 0x01 : 0x00]) } } } 先に挙げたコマンド以外で、レシートを印刷する際に便利な ESC/POS コマンドのいくつかを Swift のコー ド実装と共に紹介していきます。なお、今回はコマンドを簡単に説明します。詳細はメーカーが提供するド キュメント を確認してください。 日本語 例では英字を印刷しましたが、日本語も印刷できます。私が保持しているサーマルプリンターは ShiftJIS で エンコードしたものを利用します。 var command = Data() if let textData = "こんにちは世界".data(using: .shiftJIS) { command.append(textData) } return command 2