2013-01-27 2 views
0

Следующий массив x невелик, но это мой примерный массив.большие константы массива float в отдельном классе

float x[4] = {1.0f, 2.0f, 4.0f, 8.0f}; 

Скажем, я хочу, чтобы использовать массив в моем ViewController BSViewController.h/.m. Я включил BSParam.h в BSViewController.h, но я не знаю, что еще нужно сделать, чтобы использовать x в BSViewController.m

Ниже приведен код до сих пор для моего класса, который будет containt моих постоянных массивов.

// 
// BSParam.h 

#import <Foundation/Foundation.h> 

@interface BSParam : NSObject 

@end 



// 
// BSParam.m 

#import "BSParam.h" 

@implementation BSParam 

#include <stdio.h> 


float x[4] = {1.0f, 2.0f, 4.0f, 8.0f}; 

@end 
+1

В чем конкретно проблема? –

ответ

1

1) Если вы хотите, чтобы сделать его доступным за пределами вашего класса, используйте extern ключевое слово, чтобы сделать его доступным:

// BSParam.h 
extern float x[4]; 


// BSParam.m 
#import "BSParam.h"  
float x[4] = { 1.0f, 2.0f, 4.0f, 8.0f }; 

// BSViewController.m 
#import "BSParam.h" 

- (void)dummy { 
    float t = x[0]; // etc. 
} 

2) во всяком случае, это решение сделает переменной x глобальным, и доступны в любом месте нанесени без какого-либо контекста/пространства имен для доступа к нему, так что это не оптимальное решение.

Чтобы сделать глобальные значения доступными для других частей вашего приложения, лучше использовать шаблон Singleton или использовать для этого метод класса.

Например:

@interface BSParam : NSObject 
+(float[4])x; 
@end 

@implementation BSParam 
+(float[4])x { 
    return (float[4]){ 1.0f, 2.0f, 4.0f, 8.0f }; 
} 
@end 

Так что вы можете использовать [BSParam x], чтобы получить доступ к массиву, а не только x, добавив некоторые имен открыть x массив, чтобы избежать риска связываться с другими локальными переменными или что-то еще.

+0

Я пытаюсь использовать ваш подход к шаблону Singleton. Но когда я говорю 'l = [BSParam x],' я получаю сообщение об ошибке «Использование неопределенного идентификатора« l ». Как это исправить? Добавление 'NSArray *' не помогает. – zerowords

+1

??! Почему вы говорите о 'NSArray', тогда как вы хотели использовать простые C-массивы в первый раз? '[BSParam x]' возвращает 'float [4]' так почему бы вам не использовать этот тип переменной ?! 'float * l = [BSParam x]' или 'float l = [BSParam x] [0]'. (Или, если вы хотите использовать 'NSArray', чтобы упростить его использование, используйте' NSArray' полностью, но будьте последовательны!) – AliSoftware

0

Вы можете сделать функции возвращать их для вас, или просто использовать extern объявления в заголовке:

extern float x[4]; 
Смежные вопросы