如何将元素从Swift中的[UnsafemtablePointer<;UInt8>;]强制转换为C+中的UInt8*+; 我有以下代码无法编译,因为XCODE不允许我将NSARTRAP元素转换成C++代码中的指针。 XCode给出的错误是:从不兼容的类型“id”分配给“UInt8*”

如何将元素从Swift中的[UnsafemtablePointer<;UInt8>;]强制转换为C+中的UInt8*+; 我有以下代码无法编译,因为XCODE不允许我将NSARTRAP元素转换成C++代码中的指针。 XCode给出的错误是:从不兼容的类型“id”分配给“UInt8*”,c++,ios,objective-c,swift,xcode,C++,Ios,Objective C,Swift,Xcode,我应该如何将[unsafemeutablepointer]类型的数组从Swift传递到Objective-C++ 先谢谢你 objcfunc.h + (void) call: (NSArray *) arr; + (void) callSingle: (UInt8 *) buf; objcfunc.mm + (void) call: (NSArray *) arr { UInt8 *buffer; buffer = (UInt8 *) arr[0]; // doesn't work, X

我应该如何将
[unsafemeutablepointer]
类型的数组从Swift传递到Objective-C++

先谢谢你

objcfunc.h

+ (void) call: (NSArray *) arr;
+ (void) callSingle: (UInt8 *) buf;
objcfunc.mm

+ (void) call: (NSArray *) arr {
 UInt8 *buffer;
 buffer = (UInt8 *) arr[0]; // doesn't work, XCode throws an error
 unsigned char *image;
 image = (unsigned char *) buffer;
 processImage(image); // C++ function
}
+(void) callSingle: (UInt8 *) buf {
unsigned char *image;
image = (unsigned char *) buf; // works fine
processImage(image);
}
Swift

var arr: [UnsafeMutablePointer<UInt8>] = []
arr.append(someImage)
objcfunc.call(swiftArray: arr)
let x: UnsafeMutablePointer<UInt8> buf;
// initialize buf
objcfunc.callSingle(buf);
objcfunc.mm

+ (void) call: (NSArray *) arr {
 UInt8 *buffer;
 buffer = (UInt8 *) arr[0]; // doesn't work, XCode throws an error
 unsigned char *image;
 image = (unsigned char *) buffer;
 processImage(image); // C++ function
}
+(void) callSingle: (UInt8 *) buf {
unsigned char *image;
image = (unsigned char *) buf; // works fine
processImage(image);
}
Swift

var arr: [UnsafeMutablePointer<UInt8>] = []
arr.append(someImage)
objcfunc.call(swiftArray: arr)
let x: UnsafeMutablePointer<UInt8> buf;
// initialize buf
objcfunc.callSingle(buf);
设x:unsafemtablepointer-buf;
//初始化buf
对象函数调用单一(buf);

NSArray
是Objective-C对象的数组。因此,您需要传递一个类型的实例数组,这些实例被桥接到Objective-C类型。我不确定Swift的
unsafemeutablepointer
struct是否已桥接

因为在这种情况下,您正在传递一组图像缓冲区(如果我正确理解),您可能需要考虑使用“代码> NStase或<代码>数据< /代码>,而不是针对每个图像缓冲区<代码> unSabeMutable指针< /代码>。这些类型专门用于处理字节数组,这就是图像缓冲区;看见 和

下面是一个精心设计的示例,说明如何使用
数据
NSData

目标C执行:

@implementation MyObjC

+ (void) call: (NSArray * ) arr {
    NSData * data1 = arr[0];
    UInt8 * bytes1 = (UInt8 *)data1.bytes;
    bytes1[0] = 222;
}

@end
斯威夫特:

var arr: [UnsafeMutablePointer<UInt8>] = []

// This is just an example; I'm sure that actual initialization of someImage is more sophisticated.
var someImage = UnsafeMutablePointer<UInt8>.allocate(capacity: 3)
someImage[0] = 1
someImage[1] = 12
someImage[2] = 123

// Create a Data instance; we need to know the size of the image buffer.
var data = Data(bytesNoCopy: someImage, count: 3, deallocator: .none)

var arrData = [data]  // For demonstration purposes, this is just a single element array
MyObjC.call(arrData)  // You may need to also pass an array of image buffer sizes.

print("After the call: \(someImage[0])")
var arr:[unsafemeutablepointer]=[]
//这只是一个例子;我确信someImage的实际初始化更加复杂。
var someImage=unsafemeutablepointer.allocate(容量:3)
someImage[0]=1
someImage[1]=12
someImage[2]=123
//创建数据实例;我们需要知道图像缓冲区的大小。
var data=data(字节nocopy:someImage,计数:3,deallocator:.none)
var arrData=[data]//出于演示目的,这只是一个单元素数组
call(arrData)//您可能还需要传递一个图像缓冲区大小数组。
打印(“调用后:\(someImage[0]))