2016-03-22 2 views
0

Я преобразование/импортировать некоторые унаследованный код в Swift, и я должен использовать файл констант, которые выглядят так:C массив указатели не распознается в Swift

Constants.h

extern const int workingConstant; 
extern int constantArray1[]; 
extern int constantArray2[]; 
extern int constantArray3[]; 
extern int *problematicConstant[]; 

Константы .m

const int workingConstant = 3; 
int constantArray1 [] = {2,50,50,49,47,46,44,42,16,41,49,47,46,44,42,41,16,64,64,62,62,60,60}; 
int constantArray2 [] = {72,718,63,740,94,756,117,755,127,759,121,767,120,777,118,788}; 
int constantArray3 [] = {226,505,226,505,213,518,206,531,230,545,250,562,258,575,265,560,277,543}; 
int* problematicConstant [] = {constantArray1,constantArray2,constantArray3} 

В моем унаследованном коде Objective C Я могу импортировать заголовок и вызвать метод, как:

-(void)doStuff:(int)firstConstant paths:(int **)paths shrink_p:(CGAffineTransform *)shrink_p{ 
    CGMutablePathRef hitPath = CGPathCreateMutable(); 
    for(int i = 0; i < firstConstant; i++){ 
     CGPathMoveToPoint(hitPath, &(*shrink_p), paths[firstConstant][i+1]); 
    } 
} 

, который берет рабочий и неполадчик и является методом подсмотра. Мой подкласс .swift UIView успешно обнаруживает работоспособную константу, однако проблемная константа бросает ошибку «Использовать неразрешенный идентификатор», когда я пытаюсь вызвать doStuff в моем подвью.

ответ

1

Я смог воспроизвести вашу проблему с помощью макета кода. По какой-то причине Свифт не может видеть problematicConstant через заголовок моста. Тем не менее, я был в состоянии обойти это, добавив еще одну глобальную переменную:

extern int ** ppInt; // in the header 

int ** ppInt = problematicConstant; // in the Objective-C implementation 

extern объявление и определение может перейти в существующий источник Objective-C или, если вы хотите, чтобы держать его в чистоте, в отдельный заголовок и файлы реализации. Фактически, extern может быть только в заголовке моста.

Как и в сторону, то constantArray... декларации не может быть устранен, либо, но если вы нуждаетесь в них, вы можете сделать подобный трюк:

int * pInt1 = constantArray1; 
... 
+0

Спасибо вам сударь. Вы ученый и джентльмен. –

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