如何从Swift调用C?

Bla*_*aze 132 c swift

有没有办法从Swift调用C例程?

很多iOS/Apple库只是C,我仍然希望能够调用它们.

例如,我希望能够从swift调用objc运行时库.

特别是,如何桥接iOS C标头?

Lea*_*ros 101

是的,您当然可以与Apples C库进行交互.这里解释如何.
基本上,C类型,C指针等被转换为Swift对象,例如intSwift中的C 是一个CInt.

我为另一个问题构建了一个小例子,可以用来解释如何在C和Swift之间架起桥梁:

main.swift

import Foundation

var output: CInt = 0
getInput(&output)

println(output)
Run Code Online (Sandbox Code Playgroud)

UserInput.c

#include <stdio.h>

void getInput(int *output) {
    scanf("%i", output);
}
Run Code Online (Sandbox Code Playgroud)

cliinput桥接,Header.h

void getInput(int *output);
Run Code Online (Sandbox Code Playgroud)

是最初的答案.

  • _“您当然可以与Apples C库进行交互” _错误。您可以与__any__ C库进行交互,而不仅限于Apple。 (2认同)

ric*_*ter 9

编译器将C API转换为Swift,就像它对Objective-C一样.

import Cocoa

let frame = CGRect(x: 10, y: 10, width: 100, height: 100)

import Darwin

for _ in 1..10 {
    println(rand() % 100)
}
Run Code Online (Sandbox Code Playgroud)

请参阅文档中的与Objective-C API交互.


luk*_*s83 5

万一您和我一样不熟悉XCode,并想尝试Leandro的答案中发布的摘录:

  1. 文件->新建->项目
  2. 选择“命令行工具”作为项目预设,并将项目命名为“ cliinput”
  3. 右键单击项目导航器(左侧的蓝色面板),然后选择“新建文件...”。
  4. 在下拉对话框中,名称为“ UserInput”。取消选中“也创建头文件”框。单击“下一步”后,将询问XCode是否应为您创建Bridging-Header.h文件。选择“是”。
  5. 复制并粘贴上面Leandro的答案中的代码。单击播放按钮后,它将在终端中编译并运行,该终端在xcode中内置在底部面板中。如果您在终端中输入数字,将返回一个数字。