какой самый простой способ работы с массивами в objective-c?

Я хочу создать функцию для возврата 1d-массива с двумя элементами в нем, как показано ниже:

(NSArray *) myFunction {
 NSArray * myArr = [[NSArray alloc]initwithobjects:[NSNumbers numberwithfloat:1.0f],[NSNumbers numberwithfloat:1.0f]];
//the above line is just pseudo code 

}

но когда я хочу получить nsarray из этой функции, я хочу сделать это самым простым способом, который кажется невозможным в objective-c, это то, что я написал, чтобы получить два простых значения с плавающей запятой, которые не подходят, но у меня нет любые дополнительные знания о том, как это сделать проще

NSArray *tt2 = [[NSArray alloc] initWithArray:[self myFunction]];
 float fp1=0.0f;
    float fp2=0.0f;
    BOOL firstTime = YES;
    for(NSNumber *n in tt2)
    {
        if (firstTime) {
            NSLog(@"%@" , n);
            fp1 = [n floatValue];
            firstTime = NO;
        }
        else {
            fp2 = [n floatValue];
        }

    }

приведенный выше код выглядит смешно, но у меня нет другого выбора, если вы не посоветуете мне, как преобразовать nsarray в nsnumber, а затем nsnumber в float []


person Seyed Vahid Hashemi    schedule 07.11.2011    source источник


Ответы (2)


Если вы храните только числа с плавающей запятой, вы можете вместо этого просто использовать массив C. NSArray может хранить только объекты.

Однако, похоже, вы не слышали о методе objectAtIndex?

NSNumber *firstNumber = [myArray objectAtIndex:0];
NSNumber *secondNumber = [myArray objectAtIndex:1];

Помогает ли это в вашей ситуации, из вопроса не совсем понятно, что вы пытаетесь сделать.

person jrturton    schedule 07.11.2011
comment
Я где-то читал, что мы не можем вернуть float [] из другой функции. вот почему мы должны создать много раздутого кода. - person Seyed Vahid Hashemi; 07.11.2011
comment
Кажется, это действительно так, или, по крайней мере, это не так просто сделать - я этого не знал, спасибо за информацию! Я думаю, что у вас может быть массив C в качестве ivar, если вы не получаете к нему доступ из других объектов. - person jrturton; 07.11.2011

Просто используйте массив C.

// C function returning dynamically allocated array of floats.
float *CreateNumbers(void)
{
    float *numArray = malloc(sizeof(float));
    numArray[0] = 1.0;
    numArray[1] = 2.0;

    return numArray;
}


- (void)exampleMethod
{
    float *numbers = CreateNumbers();
    float val1 = numbers[0];
    float val2 = numbers[1];

    NSLog(@"val1: %.2f, val2: %.2f\n", val1, val2);

    free(numbers);
}
person jlehr    schedule 07.11.2011