2017-09-25 25 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) 

但是这种转换确实不应该经常出现。

相关问题