可以混合使用C和Swift吗?

时间:2015-01-28 22:29:01

标签: c swift

我研究过Swift和一些C的基础知识。我怎样才能在一个项目中结合使用C和Swift?我可以忽略Objective-C吗?

3 个答案:

答案 0 :(得分:7)

将Swift和C混合是非常可能的。实际上它非常简单。例如,如果您在游乐场中键入import Darwin,您会发现各种C函数:

import Darwin

let i = atoi("42")
let path = String.fromCString(getenv("PATH"))

let voidptr = malloc(10 * UInt(sizeof(Int)))
let ptr = UnsafeMutablePointer<Int>(voidptr)
for i in 0..<10 {
    ptr[i] = i
}
let buffer = UnsafeBufferPointer(start: ptr, count: 10)
reduce(buffer, 0, +) // sum(1 to 10) = 45
free(ptr)

有各种便利转换,例如在上面的代码中,“42”自动转换为C样式字符串以传递到atoi。类似地,如果声明var i: Int = 0,则可以将其传递给C API,该C API将C指针指向int作为f(&i),并且当您传入数组时,数组也会自动转换为指针。

有关如何与Swift中的C进行交互的详细信息,请参阅Apple网站上的the docs

答案 1 :(得分:0)

您绝对可以直接与C代码连接。 This page有很多关于你如何做的细节。

答案 2 :(得分:0)

Swift旨在与Objective-C无缝兼容。这意味着我们可以在Objective-C中使用Swift API,反之亦然。

使用swift肯定可以与纯粹用C语言编写的库进行交互。这是在不同移动平台上使用相同库的最佳方式,因为Android和iOS都支持纯C.但是,您无需学习Objective-C因为我们只能使用swift来开发应用程序。

Apples文档中的注释:您无法直接将C ++代码导入Swift。相反,为C ++代码创建一个Objective-C或C包装器。

相关问题