Ja, Sie können natürlich mit Apples C-Bibliotheken interagieren. Hier wird erklärt wie.
Grundsätzlich werden die C-Typen, C-Zeiger usw. in Swift-Objekte übersetzt, z. B. ist ein C int
in Swift ein CInt
.
Ich habe ein winziges Beispiel für eine andere Frage erstellt, die als kleine Erklärung verwendet werden kann, wie man eine Brücke zwischen C und Swift schlägt:
main.swift
import Foundation
var output: CInt = 0
getInput(&output)
println(output)
UserInput.c
#include <stdio.h>
void getInput(int *output) {
scanf("%i", output);
}
cliinput-Bridging-Header.h
void getInput(int *output);
Hier ist die ursprüngliche Antwort.
Der Compiler konvertiert die C-API genau wie für Objective-C in Swift.
Siehe Interaktion mit Objective-C-APIs in den Dokumenten.
quelle
CFTypeRef
) im CoreFoundation-Stil in Swift-Objekte konvertiert. Die meisten Funktionen von ObjCRuntime.h sind für Swift jedoch nicht von Bedeutung.Nur für den Fall, dass Sie so neu bei XCode sind wie ich und die in Leandros Antwort veröffentlichten Schnipsel ausprobieren möchten :
quelle
Dieser Beitrag enthält auch eine gute Erklärung dazu, wie dies mithilfe der Modulunterstützung von clang durchgeführt werden kann .
Es wird festgelegt, wie dies für das CommonCrypto-Projekt ausgeführt wird. Im Allgemeinen sollte es jedoch für jede andere C-Bibliothek funktionieren, die Sie in Swift verwenden möchten.
Ich habe kurz damit experimentiert, dies für zlib zu tun. Ich habe ein neues iOS-Framework-Projekt erstellt und ein Verzeichnis zlib erstellt, das eine module.modulemap-Datei mit den folgenden Angaben enthält:
Dann habe ich unter Ziele -> Binär mit Bibliotheken verknüpfen die Option Elemente hinzufügen und libz.tbd hinzugefügt.
Möglicherweise möchten Sie an dieser Stelle erstellen.
Ich konnte dann folgenden Code schreiben:
Sie müssen nicht haben , um vor der zlib - Bibliothek Namen zu setzen, außer im obigen Fall ich die Swift - Klasse func die gleiche wie die C - Funktion genannt, und ohne die Qualifikation der Swift func endet oft , bis die Anwendung stoppt aufgerufen wird.
quelle
Im Fall von c ++ tritt folgender Fehler auf:
Sie benötigen auch eine C ++ - Headerdatei. Fügen Sie Ihrer Funktion eine C-Verknüpfung hinzu und fügen Sie dann die Header-Datei in den Bridge-Header ein:
Swift 3
UserInput.h
UserInput.c
main.swift
cliinput-Bridging-Header.h
Hier ist das Originalvideo , das dies erklärt
quelle
__OBJC
, Ihrem Bridging-Header einen Scheck hinzuzufügen , z. B.#ifdef __OBJC @import UIKit; #endif
Beim Umgang mit Zeigern scheint es sich um eine etwas andere Wachskugel zu handeln. Folgendes habe ich bisher für den Aufruf des C POSIX
read
-Systemaufrufs:quelle