は、次のコードスニペットを考えてみましょう:cString(:.utf8を使用)とwithUnsafeFileSystemRepresentation(_ :)はどのようにお互いに違いますか?
let url = FileManager.default.homeDirectoryForCurrentUser
let cString1 = url.absoluteString.cString(using: .utf8)
let cString2 = url.withUnsafeFileSystemRepresentation { $0 }
は、我々はcString1
とcString2
が等しいC文字列であることを期待することはできますか?
withUnsafeFileSystemRepresentation(_:)
のドキュメントに記載されているように、Swift文字列をUTF8エンコーディングのC文字列に変換しています。それはまさにcString(using: .utf8)
のことと同じです。
両方ともSwift文字列をタイプUnsafePointer<Int8>?
に変換します。
のみXcodeはCChar
がInt8
の型の別名である[CChar]?
としてcString(using:)
の戻り型が表示されています。またスウィフトアレイは私が知る限りUnsafePointer
に渡すことができます。
ほとんどの場合、私はちょうどcString(using: .utf8)
を使用していますが、何か問題はありません。何らかの理由でwithUnsafeFileSystemRepresentation(_:)
を使用する必要があるまれなケースがあります。そうでなければ、C関数は文字列を認識しません。
私はここで何が違いますか? Apple File System Guide FAQから