美文网首页
C语言调用Swift方法并传参数

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

作者: T92 | 来源:发表于2021-09-02 13:32 被阅读0次

注:本文章已默认读者会使用C语言与Swift混编,本文是在混编成功之后的基础上实现

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标记唯一

@_silgen_name("showLog")
public func showLog(logStr: UnsafePointer<CChar>) {
    print("收到C语言log: \(String(cString: logStr))")
}

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

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

相关文章

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

    注:本文章已默认读者会使用C语言与Swift混编,本文是在混编成功之后的基础上实现 Swift调用C语言的方式比较...

  • Objective-C 闭包声明(Block)

    本地变量 属性 方法参数 方法调用传参 C函数参数 类型定义

  • Swift 调用 Objective-C 的可变参数函数

    Swift 调用 Objective-C 的可变参数函数 Swift 调用 Objective-C 的可变参数函数

  • C++ calling convention

    [TOC] #1. cdecl cdecl(C Declaration)C调用规范是C/C++语言最常使用的参数传...

  • Swift实例方法的本质

    Swift中的实例方法 在Swift中,实例方法就是类方法以实例为参数并返回一个可以被实例调用的方法。可以说Swi...

  • WKWebView与JS交互

    1.原生调用JS 方法 红色框内为js方法以及要传的参数名,如果不传参数,只传方法名就好 2.js调用原生 首先,...

  • python定义方法

    # 带参数的方法 调用时需要传递实际参数的值 # 不带参数的方法 调用时不需要传参数 # 带return的方...

  • swift学习笔记

    问:传值调用与传引用调用的区别 答:一般默认的参数传递都是传值调用的,而不是传引用。所以传入的参数在函数内改变,并...

  • ##Swift语言基础精简版

    Swift语言基础学习; 在swif中t调用方法用 .来调用方法; ### 如何去定义标志符 1. Swift定义...

  • Swift 调用 c 语言

    无参数型 define 常量的定义 此类 define,Swift 会转换为常量定义,等同于如下代码 非常量的定义...

网友评论

      本文标题:C语言调用Swift方法并传参数

      本文链接:https://www.haomeiwen.com/subject/ucoqwltx.html