2017-09-25 9 views

答えて

0

いいえ、それは厳密にではありませんStringStaticStringを変換するための正しい方法。 descriptionによって返される値は実装の詳細です。

Stringを取得する最も簡単な方法は、最初にfileNameに明示的な型の注釈を追加することではありません。それはStringであることに、デフォルトうとして:

let fileName = #file 
print(type(of: fileName)) // String 

をしかし、これはあなたの実際のユースケースでは不可能であると仮定すると、別のオプションは順番にS init(decoding:as:)初期化子StaticStringStringとともに秒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コード単位をデコードします

しかし、この変換は本当にあまり頻繁に起こってはいけません。

関連する問題