我试图在objective - c++代码中使用OpenCV,我将从Swift调用。首先,我将这个答案用于连接Objective-C和Swift。在这些操作之后,我得到了三个文件:
Bridging-Header.h:
#import "opencvtest.h"
opencvtest.h:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#include <opencv2/core/core.hpp>
//#include <dlib/image_loader/load_image.h>
@interface CustomObject : NSObject
- (cv::Mat)cvMatFromUIImage:(UIImage *)image;
@end
opencvtest.mm:
#import "opencvtest.h"
错误:/Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h:5:9: note: in file included from /Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h:5:
#import "opencvtest.h"
^ /Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/opencvtest.h:23:4: error: expected a type
- (cv::Mat)cvMatFromUIImage:(UIImage *)image; ^ <unknown>:0: error: failed to import bridging header '/Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h'
另外,如果我在openvtest .h中添加#include <dlib/image_loader/load_image.h>
行,那么我得到:
/usr/local/include/DLIB/string/string.h:7:10: error: 'sstream' file not found
#include <sstream>
^
<unknown>:0: error: failed to import bridging header '/Users/user/Documents/XcodeProjects/Swift_HelloWorld/Swift_HelloWorld/Swift_HelloWorld-Bridging-Header.h'
我要注意的是,所有这些错误只发生在我把这些包括语句在这个头中,当我在。mm文件中使用它时,所有工作正常。但是我需要它们在头文件中用于声明。
那么,我该如何修复它呢?
你的Objective-C对象的接口在Swift中可用,因此在桥接头中可见,不能引用任何c++类型。你需要写一个objective - c++包装器,这样c++类型只在.mm
文件和.mm
文件的头文件中被提及。您可以通过在objective - c++代码中使用扩展来隐藏使用c++的接口部分。请参考下面的问题和问题,以获得如何做到这一点的示例:
目标C opencv包装器swift项目没有看到STL头文件