在Swift 3中,以下转换是从String
创建StaticString
的正确方法吗?
let fileName : StaticString = #file
let currentFile : String = file.description
答案 0 :(得分:6)
不,严格是将StaticString
转换为String
的正确方式。 description
返回的值是一个实现细节。
获取String
的最简单方法是不要向fileName
添加显式类型注释;因为它默认为String
:
let fileName = #file
print(type(of: fileName)) // String
但是,假设在您的实际使用案例中无法做到这一点,另一个选择是使用StaticString
的{{3}}方法以及String
的{{3}}初始值为了解码静态字符串的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)
但这种转换真的不应该经常出现。
答案 1 :(得分:1)
这应该有效:
let fileName : StaticString = #file
let currentFile : String = "\(fileName)"
(斯威夫特4)