SwiftのStringをutf8でエンコーディングするときオプショナルにしない
文字列からデータに変換するときオプショナルになる
StringProtocolに
func data(using encoding: String.Encoding, allowLossyConversion: Bool = false) -> Data?
というメソッドが定義されており、StringからDataに変換できるようになっている。この変換は第一引数で指定したエンコーディングで行われ、変換できない文字が含まれている場合にnilが返される。
UTF8で変換すればオプショナルにならない
Swift 5 以降では、Stringは内部データをUTF8で保持していて、var utf8: Self.UTF8View { get }で参照できる。
そのため、UTF8でエンコーディングするときは下記のコードでオプショナルにせずにDataに変換できる。
let string: String = "string"
let data: Data = Data(string.utf8)
内部の実装でもString.data(using:)に.utf8を渡したときはData(self.utf8)が呼ばれている。