69034


タイトルのままなのですが、Swiftにおいて以下のような記述を見かけました。

[code]

    let data = "test".data(using: .ascii)! 
    
[/code]

ネットワークを介して文字列を送信するためにいったん変換しているようなコードの一部で使われていました。  
これは、どのような処理を行っているのでしょうか？  
文字列を何らかの形で別の型のようなものに変換しているように見えるのですが  
usingの"ascii"が何を示しているのか、何故"utf-8"などを使っていないのかなどもよく分かりません。


CC BY-SA 4.0
2020-07-27T16:06:03.007
69032
2020-07-27T17:13:34.587
36446
question
swift
Swiftにおいて、let data = "test".data(using: .ascii)! というのは何をしている処理ですか？


`String`型の[`data(using:)`メソッド](https://developer.apple.com/documentation/foundation/nsstring/1416696-data)を呼ぶことによって、文字列を表すバイナリーデータに変換しています。文字列をどんなバイナリーデータで表すかはエンコーディングによって違うので、それを指定できるようになっています。

例えばご質問中に記載された例だと、`data`は、次のような中身を持つバイナリーデータになります。

[code]

    | 0x74 | 0x65 | 0x73 | 0x74 |
    (   t      e      s      t  )
    
[/code]

Swiftではバイナリーデータを表すのには`Data`型を使うことが多いので、`data(using:)`の結果も`Data`型となっています。

どんなエンコーディングを指定するかは、送信の相手先がどんなエンコーディングを期待しているかに合わせないといけません。ただ`"test"`のように、ユニコードのコードポイントがU+0000からU+007Fの範囲の文字は、`.ascii`でも`.utf8`でも結果が同じになるので、「エンコーディングはUTF-8」と指定されている相手先に、`.ascii`を指定する人もいるようです。

* * *

変に言葉を重ねると逆に分かりにくくなるかと思って編集しているうちに、なにか中途半端な説明になってしまったような気もします。分かりにくいところがあれば、コメント等付けていただけるようお願いします。


CC BY-SA 4.0
2020-07-27T17:13:34.587
69034
2020-07-27T17:13:34.587
13972
69032
answer