Swift使用静态库编译源作为Objective-C ++

时间:2016-03-08 17:08:02

标签: c++ ios

我是Swift的新手。最近我遇到了一个问题 有一个静态库编译源代码为Objective-C ++。例如,在.h文件中的“import”,如:

#import <Foundation/Foundation.h>
#import <map>

@interface CppLib : NSObject

@end

现在我创建一个新的swift项目,包括静态库项目创建的.a和.h文件。添加一个名为“Swift_CppLib-Bridging-Header.h”的新桥接文件:

#ifndef Swift_CppLib_Bridging_Header_h
#define Swift_CppLib_Bridging_Header_h

#import "CppLib.h"

#endif

然后CMD + B,构建项目失败:

/Users/air/Somnus/CodeDemo/Swift_CppLib/Swift_CppLib/Swift_CppLib-Bridging-Header.h:12:9: note: in file included from /Users/air/Somnus/CodeDemo/Swift_CppLib/Swift_CppLib/Swift_CppLib-Bridging-Header.h:12:
#import "CppLib.h"
        ^
/Users/air/Somnus/CodeDemo/Swift_CppLib/Swift_CppLib/Lib/CppLib.h:10:9: error: 'map' file not found
#import <map>
        ^
<unknown>:0: error: failed to import bridging header '/Users/air/Somnus/CodeDemo/Swift_CppLib/Swift_CppLib/Swift_CppLib-Bridging-Header.h'

谁能帮我解决这个问题?感谢任何提示!

1 个答案:

答案 0 :(得分:-1)

您需要确保在导出到swift的标头中没有可见的c ++或objective-c ++。苹果凭借自己的智慧决定不再迅速支持c ++。在我看来,这对他们来说是一个可怕的决定......但我不在那里工作所以没有发言权:)

所以你不得不把文件夹包装在一个瘦的obj-c包装器中......或者(恕我直言)做出明智的事情,避免像瘟疫那样迅速。它只是一个比目标c更复杂的语法糖涂层,不幸的是,如果没有完全理解objective-c,你就无法在swift中写一个严肃的应用程序。

</rant>:)