Der Aufruf von Swift in C ist ziemlich einfach, aber ich bin dabei, einen bidirektionalen Wrapper in C zu erstellen, also muss mein C Swift-Funktionen aufrufen.Wie wähle ich Swift am besten von C aus?
Jetzt kann ich dies tun, indem ich Funktionszeiger in C deklariere und meine C-Funktionen sie aufrufen, nachdem die Swift-Seite sie eingerichtet hat, um den Code in Swift aufzurufen.
Meine C-Header-Datei:
typedef void (*callback_t)(void);
void callBackIntoSwift(callback_t cb);
Meine C-Implementierungsdatei:
#include "stuff.h"
#include <stdio.h>
void callBackIntoSwift(callback_t cb)
{
printf("Will call back into Swift\n");
cb();
printf("Did call back into Swift\n");
}
Nach meiner C-Header-Datei in dem Überbrückungs Header einschließlich, kann ich folgendes auf der Swift Seite tun:
let cb: callback_t = {
someKindOfSwiftFunction()
}
callBackIntoSwift(cb)
Oder auch:
callBackIntoSwift {
someKindOfSwiftFunction()
}
Gibt es eine bessere Möglichkeit, dies zu tun, wo Funktionszeiger und Rückrufe nicht benötigt werden? Ich möchte die C-Seite someKindOfSwiftFunction
direkt aufrufen lassen ... aber wenn ich versuche, @convention (c)
auf Funktionsdeklarationen anzuwenden, erhalte ich die Nachricht, dass das Attribut nur auf Typen und nicht auf Deklarationen angewendet werden kann.
Irgendwelche Ideen oder Codebasen in z.B. Github kann ich mir ansehen?
OP fragte über C-Funktionen in schnellen Aufruf, nicht wie ein Objective-C-Methode – pbush25
Autor Swif anrufen möchten, rufen T-Code von C. "Der Aufruf von Swift in C ist ziemlich einfach, aber ich bin dabei, einen bidirektionalen Wrapper in C zu erstellen, also muss mein C Swift-Funktionen aufrufen." @ pbush25 – Rolan
Wahrscheinlich kann ich meinen Kommentar erweitern. Die Funktion 'SwiftFunctionWrapper()' kann von jeder c-Datei aus aufgerufen werden. – Rolan