Sí, por supuesto, puede interactuar con las bibliotecas de Apples C. Aquí se explica cómo.
Básicamente, los tipos C, los punteros C, etc. se traducen en objetos Swift, por ejemplo, una C int
en Swift es a CInt
.
Construí un pequeño ejemplo, para otra pregunta, que puede usarse como una pequeña explicación, sobre cómo tender un puente entre C y Swift:
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);
Aquí está la respuesta original.
El compilador convierte C API a Swift al igual que lo hace para Objective-C.
Consulte Interactuar con las API de Objective-C en los documentos.
fuente
CFTypeRef
) de estilo CoreFoundation se convierten en objetos Swift. Sin embargo, la mayoría de las funciones ObjCRuntime.h no son significativas para Swift.En caso de que seas tan nuevo en XCode como yo y quieras probar los fragmentos publicados en la respuesta de Leandro :
fuente
Esta publicación también tiene una buena explicación sobre cómo hacer esto usando el soporte del módulo clang .
Está enmarcado en términos de cómo hacer esto para el proyecto CommonCrypto, pero en general debería funcionar para cualquier otra biblioteca de C que desee usar desde Swift.
Experimenté brevemente haciendo esto para zlib. Creé un nuevo proyecto de marco de iOS y creé un directorio zlib, que contiene un archivo module.modulemap con lo siguiente:
Luego, en Objetivos -> Enlace binario con bibliotecas, seleccioné agregar elementos y agregué libz.tbd.
Es posible que desee construir en este punto.
Luego pude escribir el siguiente código:
No tiene que poner el nombre de la biblioteca zlib al frente, excepto en el caso anterior que nombré la función de clase Swift de la misma manera que la función C, y sin la calificación la función Swift termina siendo llamada repetidamente hasta que la aplicación se detiene.
fuente
En el caso de c ++, aparece este error:
También necesita un archivo de encabezado c ++. Agregue c-linkage a su función, luego incluya el archivo de encabezado en bridge-header:
Swift 3
UserInput.h
UserInput.c
main.swift
cliinput-Bridging-Header.h
Aquí está el video original que explica esto
fuente
__OBJC
cheque a su Encabezado de puente, por ejemplo#ifdef __OBJC @import UIKit; #endif
Parece ser una bola de cera bastante diferente cuando se trata de punteros. Esto es lo que tengo hasta ahora para llamar a la llamada al
read
sistema C POSIX :fuente