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

时间:2015-10-19 07:59:16

标签: swift optional

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

1 个答案:

答案 0 :(得分:1)

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