2016-03-22 17 views
0

Ich Umwandlung/einige Legacy-Code in Swift importieren und ich habe eine Datei von Konstanten zu verwenden, die wie folgt aussehen:C Zeigerfeld nicht in Swift erkannt

constants.h

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

Konstanten .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} 

In meinem Vermächtnis Objective-C-Code kann ich den Header importieren und eine Methode aufrufen wie:

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

das dauert die WorkingConstant und die problematischeConstant und ist eine Methode einer Subview. Meine .Swift UIView-Unterklasse findet erfolgreich den workingConstant, aber der problematicConstant gibt einen "Use of unsolved identifier" -Fehler aus, wenn ich versuche, doStuff in meiner Unteransicht aufzurufen.

Antwort

1

Ich konnte Ihr Problem mit einigen Mock-up-Code reproduzieren. Aus welchem ​​Grund auch immer kann Swift problematicConstant nicht über den Bridging-Header sehen. Aber ich war in der Lage, dies zu umgehen, indem sie noch das Hinzufügen eines weiteren globale Variablen:

extern int ** ppInt; // in the header 

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

Die extern Erklärung und Definition können die vorhandenen Objective-C-Quelle gehen in oder, wenn Sie es sauber halten wollen, in getrennten Kopf- und Implementierungsdateien. In der Tat kann die extern nur in der Bridging-Header sein.

Als beiseite, die constantArray... Erklärungen nicht überbrückt werden können, auch nicht, aber wenn Sie sie benötigen, können Sie einen ähnlichen Trick:

int * pInt1 = constantArray1; 
... 
+0

Vielen Dank guten Herren. Sie sind ein Gelehrter und ein Gentleman. –