Objective-C中扩展一个结构体

3

我有一个在Swift中的扩展(SCNVector3),就像这样:

extension SCNVector3 {

    // some functions extending SCNVector3 here....

}

我想将这个扩展转换为Objective-C。我知道在ObjC中扩展的等效物是“类别”,但似乎不可能在像SCNVector3这样的结构体上创建一个类别。 https://developer.apple.com/documentation/scenekit/scnvector3

1
在Objective-C中没有与Swift结构体相对应的东西。您应该将扩展的方法实现为C函数。 - clemens
谢谢您的回答。您能否提供更多关于如何继续的详细信息?非常感谢! - toto_tata
我已经写了一个示例作为答案。 - clemens
1个回答

2

在Objective-C中没有与Swift结构体相对应的概念。你应该将扩展方法实现为C函数。例如,计算向量长度:

inline SCNVector3 ExtSCNVector3Subtract(SCNVector3 inA, SCNVector3 inB) {
    return SCNVector3Make(inA.x - inB.x, inA.y - inB.y, inA.z - inB.z);
}

inline float ExtSCNVector3Length(SCNVector3 inA) {
    return sqrtf(inA.x * inA.x + inA.y * inA.y + inA.z * inA.z);
}

您如何命名函数完全取决于您的喜好。您可以按以下方式调用它:
SCNVector3 a = ...;
SCNVector3 a = ...;
float distance = ExtSCNVector3Length(ExtSCNVector3Subtract(a, b));

那听起来很不错!所以,我应该创建一个.c文件和相应的.h文件吗?使用特定的名称?然后,我该如何做才能让编译器理解这些扩展函数扩展了SCNVector3?谢谢!!! - toto_tata
如果您将函数声明为 inline,则无需 .c 文件。对于编译器来说也没有必要。它只是一个普通的 C 函数,您也需要像其他函数一样调用它。 - clemens
我有以下扩展函数: func distance(from vector: SCNVector3) -> Float { let distanceX = self.x - vector.x let distanceY = self.y - vector.y let distanceZ = self.z - vector.zreturn sqrtf((distanceX * distanceX) + (distanceY * distanceY) + (distanceZ * distanceZ))} 如果我将其转换为Obj C并放在我的代码中的任何位置,我不知道它如何工作。感谢您的帮助。 - toto_tata
我将尝试这个。会告诉你的。谢谢。 - toto_tata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接