我是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
}
答案 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
,或者创建一个您将返回的自定义结构,它具有匹配的成员。