我想從Swift中訪問用C++頭文件編寫的enum
的值。具體來說,我在OpenCV的hpp頭文件中有這個enum
,我想將它的值暴露給Swift。我試圖建立斯威夫特和Objective-C之間的橋接報頭,並把包裝圍繞C++枚舉值我想揭露,但是編譯器不樂意了:從Swift訪問C++枚舉
imgproc.hpp: C++的頭文件
enum ThresholdTypes {
THRESH_BINARY = 0,
THRESH_BINARY_INV = 1,
THRESH_TRUNC = 2,
...
};
橋接報頭:
#import "OpenCVWrapper.h"
OpenCVWrapper.h:我的目標C WRA PPER類暴露於斯威夫特
#ifdef __cplusplus
#import <opencv2/core.hpp>
#import <opencv2/imgproc.hpp>
#endif
#import <Foundation/Foundation.h>
@interface OpenCVWrapper : NSObject
typedef enum {
Binary = cv::THRESH_BINARY, // ERROR: use of undeclared identifier `cv`
BinaryInv = cv::THRESH_BINARY_INV // ERROR: use of undeclared identifier `cv`
} ThresholdingType;
...
@end
如果我提出這個枚舉聲明和C++代碼(OpenCV的)導入到OpenCVWrapper.mm
那麼編譯器就可以了吧,我也可以用它就好了,但我想將此枚舉暴露給Swift,因此它必須位於頭文件中。然而,當我直接在Objective-C頭文件中公開C++枚舉時,有些東西是不對的。
是否可以直接從Objective-C頭文件訪問C++常量/枚舉,以這種方式可以橋接Swift?
我看過使用extern如this和this,但在我的設置中仍然無法識別C++常量。
正如在https://stackoverflow.com/questions/35229149/interacting-with-c-classes-from-swift中指出的,橋接頭文件*不能處理C++。如果直接或間接通過另一個.h文件包含.hpp文件,則無關緊要。 –
從C到Swift會更容易嗎?在OpenCV 2中,有一個[OpenCV的C API](http://docs.opencv.org/2.4/modules/core/doc/old_basic_structures.html)。不幸的是,OpenCV 3中的維護似乎已經下降:[openCV很快就會降低C API支持](http://answers.opencv.org/question/17546/opencv-will-drop-c-api-support-soon/ )。這是從2013年開始的問答。使用Google搜索「opencv c api」,我找到了一些C API文檔。頁面的單個類的OpenCV 3. – Scheff
@Scheff,我想避免將來可能停止工作的解決方案,但感謝您的參考。 – HuaTham