使用Swift的可选绑定直接获取NSData的字节?
问题描述:
我有下面的代码,假设data
是NSData?
类型:使用Swift的可选绑定直接获取NSData的字节?
if let myData = data {
let bytes = UnsafePointer<UInt8>(myData.bytes)
...
}
如何减少这一条语句,如:
if let bytes = UnsafePointer<UInt8>?(data?.bytes) {
...
}
以上给出了一个错误:
答
同样为Getting the count of an optional array as a string, or nil,您可以使用Optional
的map()
方法:
/// If `self == nil`, returns `nil`. Otherwise, returns `f(self!)`.
@warn_unused_result
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?
你的情况:
if let bytes = (data?.bytes).map({ UnsafePointer<UInt8>($0) }) {
}
(data?.bytes)
使用可选的链接和有型 UnsafePointer<Void>?
。映射函数用于将 转换为UnsafePointer<UInt8>?
,最终用 可选绑定对其进行解包。