使用 Swift 的可选绑定直接获取 NSData 的字节?

Using Swift's optional binding to get NSData's bytes directly?

我有以下代码,假设 dataNSData? 类型:

    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>?,最后用 可选绑定。