在 Swift 4 中将数据转换为 DispatchData
Convert Data to DispatchData in Swift 4
我正在将项目迁移到 Swift 4,但我无法弄清楚我应该如何使用新的 API:s 在 Swift 4 中执行此操作。以下代码是旧的 Swift 3 路(从函数的中间开始,因此是守卫):
let formattedString = "A string"
guard let stringData: Data = formattedString.data(using: .utf8) else { return }
let data: DispatchData = [UInt8](stringData).withUnsafeBufferPointer { (bufferPointer) in
return DispatchData(bytes: bufferPointer)
}
现在它给出以下警告:init(bytes:)' is deprecated: Use init(bytes: UnsafeRawBufferPointer) instead
为此,您需要访问类型为 UnsafeRawBufferPointer
而不是 UnsafeBufferPointer<UInt8>
的变量
使用withUnsafeBytes
得到一个UnsafeRawPointer
到数据字节,
从该指针和计数创建一个 UnsafeRawBufferPointer
,
并将其传递给 DispatchData
构造函数:
let formattedString = "A string"
let stringData = formattedString.data(using: .utf8)! // Cannot fail!
let data = stringData.withUnsafeBytes {
DispatchData(bytes: UnsafeRawBufferPointer(start: [=10=], count: stringData.count))
}
或者,从字符串 UTF-8 视图创建一个数组,然后
使用 withUnsafeBytes
得到一个 UnsafeRawBufferPointer
表示数组连续元素存储:
let formattedString = "A string"
let data = Array(formattedString.utf8).withUnsafeBytes {
DispatchData(bytes: [=11=])
}
以上所有的解决方案看起来很复杂,其实很简单:
let string = "str"
if let data = string.data(using: .utf8) {
let dispatchData = data.withUnsafeBytes { DispatchData(bytes: [=10=]) }
}
我正在将项目迁移到 Swift 4,但我无法弄清楚我应该如何使用新的 API:s 在 Swift 4 中执行此操作。以下代码是旧的 Swift 3 路(从函数的中间开始,因此是守卫):
let formattedString = "A string"
guard let stringData: Data = formattedString.data(using: .utf8) else { return }
let data: DispatchData = [UInt8](stringData).withUnsafeBufferPointer { (bufferPointer) in
return DispatchData(bytes: bufferPointer)
}
现在它给出以下警告:init(bytes:)' is deprecated: Use init(bytes: UnsafeRawBufferPointer) instead
为此,您需要访问类型为 UnsafeRawBufferPointer
而不是 UnsafeBufferPointer<UInt8>
使用withUnsafeBytes
得到一个UnsafeRawPointer
到数据字节,
从该指针和计数创建一个 UnsafeRawBufferPointer
,
并将其传递给 DispatchData
构造函数:
let formattedString = "A string"
let stringData = formattedString.data(using: .utf8)! // Cannot fail!
let data = stringData.withUnsafeBytes {
DispatchData(bytes: UnsafeRawBufferPointer(start: [=10=], count: stringData.count))
}
或者,从字符串 UTF-8 视图创建一个数组,然后
使用 withUnsafeBytes
得到一个 UnsafeRawBufferPointer
表示数组连续元素存储:
let formattedString = "A string"
let data = Array(formattedString.utf8).withUnsafeBytes {
DispatchData(bytes: [=11=])
}
以上所有的解决方案看起来很复杂,其实很简单:
let string = "str"
if let data = string.data(using: .utf8) {
let dispatchData = data.withUnsafeBytes { DispatchData(bytes: [=10=]) }
}