4

我有自己的类,并且正在编写一个具有多个输入(三个浮点值)和多个输出(三个浮点值)的方法。我不知道如何从一个方法中获得多个输出。有任何想法吗?

我当前的方法如下所示:

- (void)convertABC2XYZA:(float)a
                  B:(float)b 
                  C:(float)c 
            outputX:(float)x 
            outputY:(float)y 
            outputZ:(float)z 
{
    x = 3*a + b;
    y = 2*b;
    z = a*b + 4*c;
}
4

3 回答 3

9

“返回”多个输出的一种方法是将指针作为参数传递。像这样定义你的方法:

- (void)convertA:(float)a B:(float)b C:(float) intoX:(float *)xOut Y:(float *)yOut Z:(float)zOut {
    *xOut = 3*a + b;
    *yOut = 2*b;
    *zOut = a*b + 4*c;
}

并这样称呼它:

float x, y, z;
[self convertA:a B:b C:c intoX:&x Y:&y Z:&z];

另一种方法是创建一个结构并返回它:

struct XYZ {
    float x, y, z;
};

- (struct XYZ)xyzWithA:(float)a B:(float)b C:(float)c {
    struct XYZ xyz;
    xyz.x = 3*a + b;
    xyz.y = 2*b;
    xyz.z = a*b + 4*c;
    return xyz;
}

像这样称呼它:

struct XYZ output = [self xyzWithA:a B:b C:c];
于 2012-08-08T21:35:54.900 回答
5

Objective-C 中的方法(与Python 或 JavaScript不同)最多只能返回 1 个东西。创建一个“事物”以包含您要返回的 3 个浮点数,然后返回其中一个。

您可以使用输出参数而不是返回。

于 2012-08-08T21:34:17.683 回答
1

这与 C 的关系比与 Objective-c 的关系更大。

您需要通过引用传递值。你的函数应该这样声明:

- (void)convertABC2XYZA:(float)a
              B:(float)b 
              C:(float)c 
        outputX:(float *)x 
        outputY:(float *)y 
        outputZ:(float *)z;

并像这样调用:

[receiver convertABC2XYZA:a B:b C:c outputX:&x outputY:&y outputZ:&z];
于 2012-08-08T21:45:08.037 回答