使用 Swift 的可选绑定直接获取 NSData 的字节?
Using Swift's optional binding to get NSData's bytes directly?
我有以下代码,假设 data
是 NSData?
类型:
if let myData = data {
let bytes = UnsafePointer<UInt8>(myData.bytes)
...
}
如何将其简化为单个语句,例如:
if let bytes = UnsafePointer<UInt8>?(data?.bytes) {
...
}
上面给出的错误是:Cannot invoke initializer for type 'UnsafePointer<UInt8>?' with an argument list of type '(UnsafePointer<Void>?)'
与 类似,您可以使用 map()
Optional
的方法:
/// 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>([=11=]) }) {
}
(data?.bytes)
使用可选链接并具有类型
UnsafePointer<Void>?
。 map 函数用于将其转换为
到 UnsafePointer<UInt8>?
,最后用
可选绑定。
我有以下代码,假设 data
是 NSData?
类型:
if let myData = data {
let bytes = UnsafePointer<UInt8>(myData.bytes)
...
}
如何将其简化为单个语句,例如:
if let bytes = UnsafePointer<UInt8>?(data?.bytes) {
...
}
上面给出的错误是:Cannot invoke initializer for type 'UnsafePointer<UInt8>?' with an argument list of type '(UnsafePointer<Void>?)'
与 map()
Optional
的方法:
/// 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>([=11=]) }) {
}
(data?.bytes)
使用可选链接并具有类型
UnsafePointer<Void>?
。 map 函数用于将其转换为
到 UnsafePointer<UInt8>?
,最后用
可选绑定。