Какой самый простой способ работы с массивами в target-c? - PullRequest
0 голосов
/ 07 ноября 2011

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

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

}

, но когда я хочу получить nsarray из этой функции, я хочу сделать это самым простым способомчто кажется невозможным в target-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 []

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

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

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

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

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

2 голосов
/ 07 ноября 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);
}
...