Objective-C中结构的扩展

时间:2017-09-07 17:44:45

标签: objective-c extension-methods objective-c-category

我在Swift中有一个扩展名(SCNVector3),如下所示:

extension SCNVector3 {

    // some functions extending SCNVector3 here....

}

我想将此扩展名转换为Objective-C。我知道ObjC中的扩展等同于'类别'但似乎不可能在像SCNVector3这样的结构上创建一个类别。

https://developer.apple.com/documentation/scenekit/scnvector3

1 个答案:

答案 0 :(得分: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));