我有一个 XCode 版本的项目:15.4,使用 Swift 进行 iOS 开发 -> uiKit。 我已将 c++ 类添加到我的项目中。
MyStaticClass.h:
#ifndef MYSTATICCLASS_H
#define MYSTATICCLASS_H
class MyStaticClass {
public:
static bool isEven(int number);
};
#endif
MyStaticClass.cpp
#include "MyStaticClass.h"
#include <iostream>
bool MyStaticClass::isEven(int number) {return (number % 2 == 0);}
然后我在 Objective C 中为这个类创建了包装器作为
// MyStaticClass_Wrapper.h
#import <Foundation/Foundation.h>
@interface MyStaticClassWrapper : NSObject
+ (BOOL)isEven:(int)number;
@end
// MyStaticClass_Wrapper.mm
#import <Foundation/Foundation.h>
#import "MyStaticClass_Wrapper.h"
#include "MyStaticClass.h"
@implementation MyStaticClassWrapper
+ (BOOL)isEven:(int)number {
// Uncomment the line below to use the C++ implementation
// return MyStaticClass::isEven(number);
return true;
}
@end
**注意:**目标文件是.mm而不是.m
我将桥接头文件添加为:
#import "MyStaticClass_Wrapper.h"
我在构建设置 -> Objective-C 桥接标头中添加了它的路径
添加了PrefixHeader.pch:
// PrefixHeader.pch
//#import <Foundation/Foundation.h>
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#import <Availability.h>
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#endif
typedef enum{
bFileTypeDefault = 1,
bFileTypePhoto,
bFileTypeVideo,
bFileTypeAudio,
bFileTypeDocuments,
} baseFileType;
BOOL \_isFakeAccount;
#endif
然后将前缀头路径添加到设置中的“构建设置”->“前缀头”。
当我构建它时:
错误:未命名类型使用了“BOOL”
当我取消注释“#import
错误:与未命名类型一起使用“BOOL”....“NSString”也遇到相同的错误
如何解决它,我被这个错误困扰了。
我尝试注释 BOOl,创建 .m 文件来单独声明全局变量。 没有起作用。 当我评论 .pch 文件内容时,它工作正常。
.pch 文件会添加到您为该目标编译的每个文件(c、c++ 或 objc)之前,因此如果您要导入 ObjC 标头,它应该位于
#ifdef __OBJC__
部分内。 否则,正在编译的非 objc 文件将无法识别导入。 Foundation/Foundation.h 是 ObjC 特定标头。