• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C语言中调用Swift函数实例详解

c语言 搞代码 4年前 (2022-01-06) 46次浏览 已收录 0个评论

这篇文章主要介绍了C语言中调用Swift函数实例详解的相关资料,实现该功能可以通过定义全局的指向Blocks的对象指针来实现,需要的朋友可以参考下

C语言中调用Swift函数实例详解

在Apple官方的《Using Swift with Cocoa and Objectgive-C》一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中使用Objective-C中的类。在后半部分也介绍了如何在Swift中使用C函数,不过对于如何在C语言中使用Swift函数却只字未提。这里我就为大家分享一下如何在C语言中调用Swift函数。

我们首先要知道的是,所有Swift函数都属于闭包。其次,Swift函数的调用约定与Apple为Clang编译器贡献的Blocks语法一致。因此,我们需要通过使用Blocks调用约定将Swift函数导入到C语言中。由于在C语言中无法直接声明Blocks调用约定的函数,因此我们可以通过定义全局的指向Blocks的对象指针来实现。

下面我们创建一个名为SwiftTest的macOS系统上的Swift工程。然后新建一个名为test.c的C源文件,如果Xcode没有弹出是否新建bridging-header文件,那么我们可以新增一个Objective-C源文件,最后把它给移除。这里,我们必须在工程里包含SwiftTest-Bridging-Header.h这个头文件。

然后我们编辑此头文件:

 extern void (^ __nonnull SwiftFunc)(void); extern void CFuncTest(void);

这里声明的全局指向void(^)(void)类型的Bloc

来源gao!daima.com搞$代!码网

k的引用对象。

然后我们再看test.c源文件:

 void (^SwiftFunc)(void) = NULL; void CFuncTest(void) { SwiftFunc(); } 

我们定义SwiftFunc全局对象,将它初始化为空。

然后在ViewController.swift中编辑以下内容:

 // 这里是对SwiftFunc的实现 private func swiftFuncImpl() { print("This is a Swift function!"); } class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() // 这里对定义在test.c中的SwiftFunc进行初始化 SwiftFunc = swiftFuncImpl // 这里用dispatch_async来测试SwiftFunc是否一直被hold着 dispatch_async(dispatch_get_main_queue()) { CFuncTest() } } } 

当调用了test.c中定义的CFuncTest函数之后,该函数里将直接调用SwiftFunc这一Block引用对象,从而达到了在C语言中调用了Swift中函数的目的。

以上就是C语言中调用Swift函数的介绍,如有疑问可以留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上就是C语言中调用Swift函数实例详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C语言中调用Swift函数实例详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址