文字列からデータに変換するときオプショナルになる

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)が呼ばれている。