swift 2到3转换UnsafePointer <uint8>

时间:2016-10-27 01:05:08

标签: swift migration

我需要在J2Objc中的objective-c标头中调用以下API。

/**
 * Create a new array of a specified length, setting the elements to the values in buf.
 */
class IOSByteArray: NSObject {
...
+ (instancetype)newArrayWithBytes:(const jbyte *)buf count:(NSUInteger)count;
...
}

在swift 2中,我可以做到以下几点:

func myFunc() -> IOSByteArray {
        return IOSByteArray.newArray(withBytes: UnsafePointer<UInt8>(data.bytes), count: UInt(data.count))
}

在swift 3中,我收到错误:

"Cannot invoke initializer for type 'UnsafePointer<UInt8>' with an argument list of type '(Array<UInt8>)'"

我无法弄清楚如何在swift 3中进行等效调用。
我知道https://swift.org/migration-guide/se-0107-migrate.html#automatic-migration-cases提供了解释原因和方法的原因。但对我来说这有点太博学了。

帮助!

1 个答案:

答案 0 :(得分:0)

在Swift 3中,您应该使用Data类而不是NSData

使用Data类,您可以使用withUnsafeBytes将字节转换为UnsafePointer并像这样执行

func myFunc() -> IOSByteArray {
    return data.withUnsafeBytes({ (unsafeBytes: UnsafePointer<UInt8>) -> IOSByteArray in
        return IOSByteArray.newArray(withBytes: unsafeBytes, count: UInt(data.count))
    }
}