所以我通过我的OpenCVWrapper
调用我的C ++函数。在这个函数中,我必须打开一个位于我的Xcode项目中的文件。是否可以在C ++函数中指定所需的路径?
或者我必须通过Swift中的OpenCVWrapper
传递文件?
简而言之,它看起来像是:
func sample() {
OpenCVWrapper.booProcess()
}
OpenCVWrapper.mm
中的
@implementation OpenCVWrapper : NSObject
+ (void)booProcess {
boo();
}
- (void)boo:
{
return boo();
}
@end
blink.cpp
void boo()
{
cv::CascadeClassifier my_cascade;
my_cascade.load("bar.xml");
}
已添加所有必需的包装。
答案 0 :(得分:2)
我没有找到任何正确的方法来获取C ++函数中的文件路径。所以最明显的解决方案是在Swift中获取路径的String表示。
let path = NSBundle.mainBundle().pathForResource("bar", ofType:"xml")
然后将它通过包装器传递给C ++函数
OpenCVWrapper.booProcess(path)
在OpenCVWrapper.mm中,您必须将NSString
转换为std::string
std::string *mypath = new std::string([path UTF8String]);
然后你可以通过包装器将这个路径传递给C ++函数。
+ (void)booProcess:(NSString*)path {
std::string *mypath = new std::string([path UTF8String]);
boo(*mypath);
}
答案 1 :(得分:0)
不幸的是,目前无法从Swift调用C ++代码。您必须在Objective-C中包装OpenCVWrapper
,然后在Swift中调用它。
有关详细信息,请参阅Using Swift with Objective-C。