Dav*_*tti 7 string literals swift
在斯威夫特3,是下面的转换来创建一个正确的方式String从StaticString?
let fileName : StaticString = #file
let currentFile : String = file.description
Run Code Online (Sandbox Code Playgroud)
Ham*_*ish 12
不,严格来说,这不是将a转换StaticString为a 的正确方法String。返回的值description是实现细节。
获得a的最简单方法String是不添加显式类型注释fileName。因为它将默认为String:
let fileName = #file
print(type(of: fileName)) // String
Run Code Online (Sandbox Code Playgroud)
但是,假设在您的实际用例中这是不可能的,另一个选择是将StaticString的withUTF8Buffer(_:)方法与String的init(decoding:as:)Initializer 一起使用,以便对静态字符串的UTF-8代码单元进行解码:
let fileName: StaticString = #file
let currentFile = fileName.withUTF8Buffer {
String(decoding: $0, as: UTF8.self)
}
print(currentFile)
Run Code Online (Sandbox Code Playgroud)
而且,当然,您可以为此创建自己的便捷初始化程序:
extension String {
init(_ staticString: StaticString) {
self = staticString.withUTF8Buffer {
String(decoding: $0, as: UTF8.self)
}
}
}
let fileName: StaticString = #file
let currentFile = String(fileName)
print(currentFile)
Run Code Online (Sandbox Code Playgroud)
但是,这种转换确实不应该经常出现。
这应该有效:
let fileName : StaticString = #file
let currentFile : String = "\(fileName)"
Run Code Online (Sandbox Code Playgroud)
(斯威夫特 4)
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |