功能在iOS中返回

时间:2015-02-21 15:00:47

标签: ios

我是iOS的新手,我正在尝试如何更改部分代码以获得2个返回而不是一个(如果可能,int和double)。我理解代码的作用,但我不知道如何实现多个返回?

-(int)findmaxpos:(double*)array l:(int)length s:(int)start e:(int)end{
// Find array ending point to avoid exception
int new_end = MIN(end,length-1);
// Find array mean
double mean = 0;
for (int i = start; i<= new_end; i++){
    mean += array[i];
}
mean = mean / (new_end-start+1);
// Calculate variance
double var = 0;
for (int i = start; i<= new_end; i++){
    var += pow((array[i] - mean),2);
}
var = var / (new_end-start+1);
double sd = sqrt(var);
// Calculate limit add 2.5* standart deviation to get approximatelly 95% of the values
double limit = mean + (2.5 * sd);
// Find first position above limit
int pos = -1;
while (pos<0) {
    for (int i=start; i<=new_end; i++) {
        if (array[i]>=limit){
            pos = i;
            break;
        }
    }
    limit = limit * 0.9;
}
double max =array[pos];
// Check neibouring 10 positions to find a value greater than current.
for (int i=MAX(pos-5,start); i<=MIN(new_end,pos+5); i++) {
    if (array[i]>=max){
        max = array[i];
        pos = i;
    }
}
// Return value
//cast max as double??
return pos; //20/02 max inclusion

}

2 个答案:

答案 0 :(得分:1)

目标C确实不允许返回多个值。您可以使用NSArray返回多个值,但我个人更喜欢NSDictionary。 例如。

- (NSDictionary*)doSomeTaskAndReturnMultipleValues {
//Do some task let's say you have some objects to return named a,b,c
return @{@"key1":a, @"key2":b, @"key3":c};
}

这允许您根据键值对返回值,而不是依赖于返回的值的顺序,这很容易出错。

如果您仍然希望可以使用数组,如果您知道要按特定顺序返回值。

- (NSArray*)doSomeTaskAndReturnMultipleValues {
//Do some task let's say you have some objects to return named a,b,c
return @[a,b,c];
}

希望这有帮助。

答案 1 :(得分:0)

Objective-C不允许多个返回值。执行此操作的标准方法是将两个返回值包装在一个数组中,如NSArray,或者创建一个您将返回的自定义结构,它具有匹配的成员。