- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 Swift 3 中,以下转换是否是从 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
的 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)
但是这种转换真的不应该经常出现。
关于swift - 如何在运行时将 StaticString 转换为 String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46397065/
我正在创建一个游戏,但出现此错误: 0_specialized _fatalerrorMessage(StaticString, StaticString, StaticString, UInt, f
这个问题在这里已经有了答案: Using os_log to log function arguments, or other dynamic data (5 个答案) 关闭 4 年前。 我想知道我
在 Swift 3 中,以下转换是否是从 StaticString 创建 String 的正确方法? let fileName : StaticString = #file let currentFi
某些动态网络框架使用此代码片段 appSettings = JSON.parse( decodeURIComponent( "%7B%22setting1%22%3A%22foo%2
我正在尝试调配一个包含 StaticString 参数的 Swift 函数。 这是我尝试过的: let method = class_getClassMethod(self, original1) c
在 iOS 上运行的编程语言中的泛型?不必多说了,把我的钱拿去! 这是我的实验代码(这是在 Playground 上运行的): class Foo { var value:GenericTyp
我是一名优秀的程序员,十分优秀!