swift不能直接调用c++,需要通过新建oc文件来桥接,并且实际应用场景中一般会涉及到oc和c++的数据传输。
一、用oc重新封装一遍c++中的数据模型
//c++
struct Model {
int a;
};
//oc
@interface BarcodeResultItem : NSObject
@property (nonatomic, assign) int a;
@end
二、使用NSValue *oc_obj = [NSValue valueWithBytes:&output objCType:@encode(namespace::obj)],但是如果保护struct时要注意其中的坑(NSValue转回c++结构体后会出现释放多次的bug,另外NSValue对应的这块内存上的内容也可能已经被修改了,巨坑!)
std::string和NSString互转
//NSString-->std::string
std::string str = std::string([@"str" UTF8String]);
//std::string--->NSString
NSString *str = [NSString stringWithCString:"c++.string".c_str() encoding:NSUTF8StringEncoding];
网友评论