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)
但是这种转换确实不应该经常出现。