4

私は独自のクラスを持っており、複数の入力 (3 つの float 値) と複数の出力 (3 つの float 値) を持つメソッドを作成しています。1 つのメソッドから複数の出力を取得する方法がわかりません。何か案は?

私の現在の方法は次のようになります。

- (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

複数の出力を「返す」方法の 1 つは、ポインターを引数として渡すことです。次のようにメソッドを定義します。

- (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];

もう 1 つの方法は、構造体を作成して返すことです。

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つのフロートを含む「もの」を作成し、代わりにそのうちの1つを返します。

戻る代わりに、出力パラメータを使用できます。

于 2012-08-08T21:34:17.683 に答える
1

これは、objective-c よりも 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 に答える