我想在Swift项目中使用以下Apple示例代码中的AAPLRendererUtils和AAPLMathUtilities文件。
我已经创建了一个桥接头,我导入了"APPLMathUtilities.h"它工作得很好。然而,当我尝试导入"AAPLRendererUtils.h"我遇到了问题。
AAPLRendererUtils.h是一个头文件,不遵循通常的Objective-C @interface和@implementation模式。
AAPLRendererUtils.h也导入APPLMathUtilities.h所以也许这个依赖是一个问题?
#import "AAPLMathUtilities.h"
//----------------------------------------------------------------------------------------
struct Camera
{
vector_float3 position;
vector_float3 target;
float rotation;
float aspectRatio; // width/height
float fovVert_Half; // half of vertical field of view, in radians
float distanceNear;
float distanceFar;
matrix_float4x4 GetViewMatrix () const
{
return matrix_look_at_left_hand(position, target, (vector_float3){0,1,0});
}
matrix_float4x4 GetProjectionMatrix_LH () const
{
return matrix_perspective_left_hand (
fovVert_Half * 2.f,
aspectRatio,
distanceNear,
distanceFar);
}
};
有趣的是,如果我注释掉函数声明,代码会运行,但如果我留下它们,我会得到以下错误:
字段'GetViewMatrix'声明为函数
既然你不能在C结构体中有函数,我认为Xcode将这个文件解释为C文件是正确的吗?
这不是一个C头文件,而是一个c++头文件。这个包含在示例文档中的文件,都有"。mm"扩展,它是objective - c++。c++确实允许结构体拥有方法(它基本上是一个所有成员都是公共的类,IIRC)。我知道几年前,Swift并不擅长处理c++文件。我不知道这是否改变了。如果你足够勤奋,你可能会把方法从结构体中分离出来,制作一个C文件和一个头文件。