2016-09-20 2 views
0

Am Aufruf einer .mm (objective-c/C++) -Klasse Methode von meinem schnellen ViewController über verknüpfte Header.Sie wurden erfolgreich verknüpft. Ich habe jedoch Schwierigkeiten, korrekte Datentypen zu übergeben, die als Argumente übereinstimmen. Hier ist, wo ich die Funktion in swift rufenWie kann ich sicherstellen, dass meine Array-Struktur in Objective-C und Swift identisch ist?

OpenCVWrapper.thefunc(array1, otherstuff); 

.. .array1 ist vom Typ [[Int]]

und hier ist die Definition in Objective-c

+(NSString*) thefunc: (int[][2])array1 otherstuff(int)other{ 

aber ich habe den Fehler

Cannot convert value of type '[[Int]]' to expected argument type 'UnsafeMutablepointer<(Int32)(Int32)>!' 

Wie in einem anderen ähnlich diskutiert Frage ich gepostet, muss ich sicherstellen, dass swift array1 ist in der Tat vom Typ [(Int32, Int32)]. Jetzt werden keine Fehler geworfen.

ABER, wenn ich die Objective-C Methode trocken ausführe, zeigt das Array1 nur mit 2 Werten (nach Bruchpunkt). Wo wie in Swift ich durch 9 (von 2) gehe, was ich will.

Meine Frage ist, Wie kann ich bestätigen, dass mein Array in objective-c die gleiche Struktur zu der in swift sein wird?

Antwort

1

Es scheint, dass Sie sich auf den Debugger verlassen, um Ihnen die Werte zu zeigen, die als array1 übergeben werden. Um zu überprüfen, programmatisch, die richtigen Werte übergeben, können Sie in thefunc() nach dem tun:

+(NSString*) thefunc : (int[][2])array1 { 
    for (int i = 0; i < 9; i++) 
     printf("Tuple %d is: %d, %d\n", i, array1[i][0], array1[i][1]); 
    ... 
} 

9 ist die Anzahl der 2-int Tupel Sie übergeben. Diese Anzahl sollte wahrscheinlich als eine der Sachen in otherstuff übergeben werden, es sei denn, es ist immer das Gleiche.

BTW, sollten Sie wahrscheinlich als in-out in Swift passieren array1 (man beachte die &):

OpenCVWrapper.thefunc(&array1,...) 
+0

stellt sich heraus, Debugger nicht mir alle Werte zeigte - so ja rechten Beifall. –

Verwandte Themen