首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Swift与C或C++接口?

如何将Swift与C或C++接口?
EN

Stack Overflow用户
提问于 2019-04-28 12:21:24
回答 2查看 5K关注 0票数 1

我想用C或C++编写一些本机代码,以便与iOS上的Swift一起使用。这段代码主要是从Swift调用的,但也需要回调到Swift。

Swift与这两种语言的接口机制是什么?

在这种接口中,哪个C或C++的约束最小?为什么?跨语言呼叫有什么性能差异吗?

EN

回答 2

Stack Overflow用户

发布于 2019-04-28 12:45:25

带有C或C++的C++通过桥接头越过目标C。

在这个目标- C头中,您可能包括C头,因为Objective与C是可互操作的。Swift不仅可以与C函数一起工作,而且还可以使用C 结构与结合

您还可以使用Objective++使用与C++的互操作性。但是,Objective和Swift都不能处理C++类及其语义。因此,与使用C.中的C++时相比,您将面临同样的问题,在答案中,您将发现更多关于C++互操作性的信息。

那么,从斯威夫特打电话给斯威夫特更容易吗?确定C

一步一步的演示

1)在XCode中创建Swift项目

2)添加c文件test.c

3)添加了c文件后,XCode会问您是否要创建一个标头:只需确认。

4)使用以下代码

在桥接标头(或包括在桥接标头中的标头中):

代码语言:javascript
复制
// C functions
int myCFunction(int a);
void myCFunctionWithCallback(int a, int (*f)(int));

// Swift functions accessible from C
extern int mySwiftFunction(int x);

示例test.c文件:

代码语言:javascript
复制
#include <stdio.h>

// simple example with a hardcoded swift callback
int myCFunction(int a)
{
    printf ("myCFunction in C called with %d\n", a);
    printf ("Now calling Swift from C :\n");
    int z = mySwiftFunction(10);
    printf ("Result returned in C:%d\n", z);
    return 2*a;
}

// example with a function pointer to a swift callback
void myCFunctionWithCallback(int a, int (*f)(int))
{
    printf ("myCFunctionWithCallback in C called with %d\n", a);
    printf ("Now calling Swift from C :\n");
    int z = f(a);
    printf ("Result returned in C:%d\n", z);
}

示例main.swift文件:

代码语言:javascript
复制
import Foundation

@_silgen_name("mySwiftFunction")  // vital for the function being visible from C
func mySwiftFunction(x: Int) -> Int
{
    print ("mySwiftFUnction called in Swift with \(x)")
    return 3*x
}

func mySwiftCallback(x: Int32) -> Int32
{
    print ("mySwiftCallback called in Swift with \(x)")
    return 7*x
}

print("Starting Swift/C interoperability demo !")
let a = myCFunction(12);
print ("returned result in Swift is \(a)")

print ("Now test with a callback function pointer:")
myCFunctionWithCallback(13, mySwiftCallback )

@_silgen_name使快速函数在C中可见的技巧在另一个如此回答中解释,并被文档化为这里

票数 14
EN

Stack Overflow用户

发布于 2019-04-28 13:11:31

您可以使用桥接头文件来映射在Swift中使用的Objective编写的代码。您不能使用C/C++代码,因为Xcode本身只支持Objective和Swift。在桥接头文件中,您必须导入Objective文件的头路径,这是您必须在Swift项目中导入的。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55890187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档