上一节分析Mirror源码分析时,我们发现了一个内部函数@_silgen_name。
-
常规c函数调用 @_silgen_name
1. 常规c函数调用
-
.h文件对外声明函数 -
.c文件实现函数 - 创建
XXX-Bridging-Header.h桥接文件,import对外头文件
- 新建
swift语言的命令行项目,添加c文件(test.h,test.c,桥接文件):
image.png
test.h对外声明ht_add函数:
image.png
test.c实现ht_add函数:
image.png
SwiftCTest-Bridging-Header.h桥接头文件中导入test.h文件:
image.png
main.swift文件中,正常调用c函数ht_add
image.png
2.@_silgen_name
@_silgen_name功能:
自动
搜索和调用C函数
C函数不具备重载功能,编译后的符号是在函数名前加_
(如test函数,编译后的符号名为_test)- 所以
C函数具备全局唯一性。正是利用这一特性,@_silgen_name可自动搜索和调用c函数
@_silgen_name使用:
- 直接生成
.c实现文件
- 直接生成
-
swift文件中使用@_silgen_name传入c函数,并创建swift替换函数,直接调用swift替换函数,即可实现c函数
-
- 新建
swift语言的命令行项目,仅添加test.c文件:
image.png2.
test.c直接导入stdio.h基础库,实现ht_add函数:
image.png3.
main.swift文件中,@_silgen_name传入c函数(ht_add),并创建swift替换函数(swift_ht_add),直接调用swift替换函数(swift_ht_add),即可实现c函数:
image.png
- Done~ (是不是非常简单)







