2015-02-21 4 views
0

Я новичок в iOS, и я пытаюсь понять, как изменить часть кода на 2 возврата вместо одного (если возможно, и int и double). Я понимаю, что делает код, но я не знаю, как реализовать несколько возвратов?Возвращение функции в iOS

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

}

ответ

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

Надеюсь, это поможет.

+0

Спасибо за быстрый ответ! Я использую NSDictionary сейчас, но он не компилируется, потому что он не может отправить целое число в тип указателя id, любой совет? – alto125

+0

Вам просто нужно обернуть целое число в объект, используя @ (variable_name) – jarora

+0

Прекрасное спасибо! – alto125

0

Objective-C не позволяет несколько возвращаемых значений. Стандартный способ сделать это - обернуть ваши два возвращаемых значения в массив, например NSArray, или создать настраиваемую структуру, которую вы вернете, с соответствующими членами.

Смежные вопросы