swift - 使用 Swift 的可选绑定(bind)直接获取 NSData 的字节?

标签 swift option-type

我有以下代码,假设 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>?)'

最佳答案

Getting the count of an optional array as a string, or nil 类似,您可以使用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>($0) }) {

}

(data?.bytes)使用可选链并具有类型 UnsafePointer<Void>? 。 map 函数用于转换 至UnsafePointer<UInt8>? ,最后被解开 可选绑定(bind)。

关于swift - 使用 Swift 的可选绑定(bind)直接获取 NSData 的字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209340/

相关文章:

java - 如果我之前只过滤 present() 值,为什么 findFirst() 会抛出 NullPointerException?

ios - 保留 mask UIView 的阴影

ios - Xcode 在某些文件中找不到 Swift 桥接头文件

swift - 如何正确检查非可选返回值是否有效?

java - 调用具有一个可选参数的方法

ios - 使用多线程读取FMDB数据库

Swift BinaryFloatingPoint 泛型在 log10() 调用上暴露编译错误

json - 展开可选元素时出错

java - 如何自定义 Optional 类中 NoSuchElementException 的错误信息