在 Swift 项目中使用多个 Objective-C header 文件

Using multiple Objective-C header files in Swift project

我想在 Swift 项目中使用来自 following Apple 示例代码的 AAPLRendererUtils 和 AAPLMathUtilities 文件。

我创建了一个桥接 header,我在其中导入了“APPLMathUtilities.h”,它工作正常。但是,当我尝试导入“AAPLRendererUtils.h”时,我 运行 进入了问题。

AAPLRendererUtils.h 是一个 header-only 文件,不遵循通常的 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);
    }
};

有趣的是,如果我注释掉代码 运行s 中的函数声明,但如果我将它们留在原处,则会出现以下错误:

字段'GetViewMatrix'声明为函数

由于您不能在 C 的结构中包含函数,我认为 Xcode 将此文件解释为 C 文件是否正确?

这不是 C header,它是 C++ header。在示例文档中,包含此内容的文件都具有“.mm”扩展名,即 Objective-C++。 C++ 确实允许结构具有方法(它基本上是一个 class,其中所有成员都是 public,IIRC)。我知道几年前,Swift 不太擅长处理 C++ 文件。我不知道那是否改变了。如果您足够勤奋,您可能可以将方法与结构分开来制作一个 C 文件和一个 header。