2017-09-25 26 views

回答

0

不,這不是嚴格StaticString轉換爲String的正確方法;由description返回的值是實現細節。

獲得String的最簡單方法不是將明確的類型註釋添加到fileName開頭;因爲它會被默認爲一個String

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

然而,假設這是不是在你實際使用的情況下有可能,另一種選擇是使用StaticStringwithUTF8Buffer(_:)方法隨着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) 

但是這種轉換確實不應該經常出現。

相關問題