C语言调用Swift方法并传参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言调用Swift方法并传参数相关的知识,希望对你有一定的参考价值。

参考技术A Swift 调用 C语言 的方式比较简单,网上资料也较多,反之 C语言 调用 Swift 的资料相对较少(目前我只找到这一篇 如何在C语言中调用Swift函数 ,且调用方式与本文不同)。其实也比较简单,稍微需要了解的是C语言与Swift中类型对应关系,类型错误会崩溃或者接收不到参数。先提供一个类型对照表:

了解类型对应关系后,接下来的就比较容易了,例如我有个需求,C语言需要调用一个 showLog 的方法将日志字符串传给Swift用于UI界面显示(不是在控制台打印)。实现此需求共需要2步骤

第一步:
在C语言的文件中声明 void showLog(char* logStr) 函数,只需要声明,不需要实现方法。

第二步:
C语言方法参数是一个字符串的指针,从上面的参照表可以知道 Char 类型对应 CChar 类型,那么 Char 的指针类型则对应 UnsafePointer<CChar> 类型,在Swift中声明一个与C语言一样名字的全局函数,并用 @_silgen_name 标记唯一

到此,在C语言中调用 void showLog(char* logStr) ,Swift中 showLog(logStr: UnsafePointer<CChar>) 就会被调用并接收到参数了。

它的原理其实就是在 LLVM 编译后,C语言与Swift生成的东西是一样的,那么在C语言中声明了这个方法而不实现,把实现放在Swift中,那么程序运行时C语言在调用这个方法时,会去查找这个方法的实现,编译后生成的东西一样那肯定可以正常交流,于是就找到Swift中的方法并调用了,大概是这个意思

c#webapi怎么调用接口并传参数

参考技术A 使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路

以上是关于C语言调用Swift方法并传参数的主要内容,如果未能解决你的问题,请参考以下文章

Swift中对C语言接口缓存的使用以及数组字符串转为指针类型的方法

Swift 类型转换

JAVA如何调用C语言编写的程序,并且传参数,读取返回结果?

关于c语言中数组作为函数参数的函数之间调用问题

C语言中怎样调用函数(举个例子)

C语言编程-用数组方法编写函数strcmp,比较两个字符串的大小。