【Swift】Data型の使い方!String型への変換方法とバイトの意味

この記事からわかること
- SwiftのData型とは?
- Data型をString(文字列)型に変換する方法
- バイト数を取得するには?
- Dataの一部をを取得するsubdata(in:)とは?
- バイトやビットに安全にアクセスをするwithUnsafeBytesとは?
index
[open]
\ アプリをリリースしました /
環境
- Xcode:15.0.1
- iOS:17.0
- Swift:5.9
- macOS:Sonoma 14.1
SwiftのData型とは?
Swiftのデータ型には文字列を表すString
型や数値を表すInt
型の他にData
型というものがあります。これは連続したバイトの塊を表すための型になります。バイトとはコンピューターで扱うことのできる最小単位である「ビット(bit)」8個分をひとまとまりにした単位です。またバイトを表しやすくするために8進数や16進数がよく利用されます。
このようにData型は人間が読めるデータではなくコンピューターが識別しやすい状態のデータ(バイナリデータ)で値を保持しています。
Data
型が実際によく使用されるのはファイルやクラウドからデータを取得・送信する際やBluetoothでデータのやり取りを行う時などです。SwiftでJSON形式でデータを扱うときなどにもData
型は使用されます。
使い方
Data
型をSwiftで使用する方法をまとめていきます。
インスタンスを生成
Data
型はイニシャライザを使用して空のインスタンスを生成することが可能です。print
などで出力するとバイト数が表示されます。
バイト数を取得する
print
した際は0 bytes
のようにバイト数を確認することができますが、コード内でバイト数を取得したい場合はcount
プロパティを参照します。
文字列からData型へ変換する
公式リファレンス:data(using:allowLossyConversion:)メソッド
文字列(String
型)をData
型へ変換するにはdata(using:allowLossyConversion:)
メソッドを使用します。変換は必ず成功するわけではなく、失敗した場合はnil
が返ります(多分ほぼないですが)。引数using
にはUInt
型で文字列エンコーディングを指定します。詳細はString.Encodingをご覧ください。
実際に文字列を変換する際には以下のように使用します。表示されるバイト数は一見文字数と一致しているように見えますが、これは必ずしも一致するわけではないので注意してください。UTF-8エンコーディングではASCII文字は1バイトで表現されますが、特殊文字や非ASCII文字は複数バイトで表現されることがあります。
ちなみに引数allowLossyConversion
は変換が成功しない場合の挙動を指定できます。初期値のfalse
では一部でも変換できない場合にnil
を返しますが、true
にすると変換できない部分が一部であればそこが失われても変換を試みるようです。
Data型から文字列に変換する
公式リファレンス:String(data:, encoding:)
Data
型を文字列(String
型)へ変換するにはString(data:, encoding:)
イニシャライザを使用します。引数には対象のデータとエンコーディングを指定します。
Dataの一部を取得する:subdata(in:)
Data
の一部のバイトを指定して取得するにはsubdata(in:)
メソッドを使用します。引数in
には取得したい範囲のバイトインデックスを指定します。例えば2バイト〜7バイトの範囲のみを取得するには以下のように記述します。
Data同士を連結する
Data
型同士は+
演算子を使用して連結することが可能です。
バイトやビットに安全にアクセス:withUnsafeBytes
Data
オブジェクト内のデータに安全にアクセスするためにはwithUnsafeBytes
メソッドを使用します。以下のようにすることでアスキーコードを取得することが可能です。
出力結果は以下のようになります。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。