0
在Swift 3中,下面的轉換是從StaticString
創建String
的正確方法嗎?如何在運行時將StaticString轉換爲String?
let fileName : StaticString = #file
let currentFile : String = file.description
在Swift 3中,下面的轉換是從StaticString
創建String
的正確方法嗎?如何在運行時將StaticString轉換爲String?
let fileName : StaticString = #file
let currentFile : String = file.description
不,這不是嚴格到StaticString
轉換爲String
的正確方法;由description
返回的值是實現細節。
獲得String
的最簡單方法不是將明確的類型註釋添加到fileName
開頭;因爲它會被默認爲一個String
:
let fileName = #file
print(type(of: fileName)) // String
然而,假設這是不是在你實際使用的情況下有可能,另一種選擇是使用StaticString
的withUTF8Buffer(_:)
方法隨着String
「在s階init(decoding:as:)
初始化器解碼靜態字符串的UTF-8編碼單元:
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)
但是這種轉換確實不應該經常出現。