我需要在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提供了解释原因和方法的原因。但对我来说这有点太博学了。
帮助!
答案 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))
}
}