0
スウィフト3では、StaticString
からString
を作成する正しい方法は次のとおりですか?実行時にStaticStringを文字列に変換するにはどうすればよいですか?
let fileName : StaticString = #file
let currentFile : String = file.description
スウィフト3では、StaticString
からString
を作成する正しい方法は次のとおりですか?実行時にStaticStringを文字列に変換するにはどうすればよいですか?
let fileName : StaticString = #file
let currentFile : String = file.description
いいえ、それは厳密にではありませんString
にStaticString
を変換するための正しい方法。 description
によって返される値は実装の詳細です。
String
を取得する最も簡単な方法は、最初にfileName
に明示的な型の注釈を追加することではありません。それはString
であることに、デフォルトうとして:
let fileName = #file
print(type(of: fileName)) // String
をしかし、これはあなたの実際のユースケースでは不可能であると仮定すると、別のオプションは順番にS init(decoding:as:)
初期化子StaticString
「String
とともに秒withUTF8Buffer(_:)
方法」を使用することです
let fileName: StaticString = #file
let currentFile = fileName.withUTF8Buffer {
String(decoding: $0, as: UTF8.self)
}
print(currentFile)
そして、もちろん、あなたがこのために、独自の便利な初期化子を作ることができる:
extension String {
init(_ staticString: StaticString) {
self = staticString.withUTF8Buffer {
String(decoding: $0, as: UTF8.self)
}
}
}
let fileName: StaticString = #file
let currentFile = String(fileName)
print(currentFile)
静的な文字列のUTF-8コード単位をデコードします
しかし、この変換は本当にあまり頻繁に起こってはいけません。