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

 更新时间:2017年07月24日 15:28:30   作者:zenny_chen  
这篇文章主要介绍了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)类型的Block的引用对象。

然后我们再看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语言中const关键字的用法

    详解C语言中const关键字的用法

    这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • 必须知道的C语言八大排序算法(收藏)

    必须知道的C语言八大排序算法(收藏)

    这篇文章主要介绍了C语言八大排序算法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10
  • C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及区别

    这篇文章主要介绍了C语言 指针与数组的详解及对比的相关资料,需要的朋友可以参考下
    2017-03-03
  • 基于C++实现的线程休眠代码

    基于C++实现的线程休眠代码

    这篇文章主要介绍了基于C++实现的线程休眠代码,包括了Linux平台及基于boost库的两种实现方法,有不错的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C/C++混合编程之extern “C”的使用示例

    C/C++混合编程之extern “C”的使用示例

    这篇文章主要给大家介绍了关于C/C++混合编程之extern “C”使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • C++核心编程之占位参数和默认参数

    C++核心编程之占位参数和默认参数

    这篇文章主要介绍了C++核心编程之占位参数和默认参数,c++中函数的形参列表中的形参是可以有默认值的,函数的形参列表里可以有占位参数,用来占位,调用函数时必须填补位置。下面更多相关内容的详细介绍,需要的小伙伴可以参考一下
    2022-03-03
  • C语言中冒泡排序算法详解

    C语言中冒泡排序算法详解

    大家好,本篇文章主要讲的是C语言中冒泡排序算法详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Qt编写显示密码强度的控件

    Qt编写显示密码强度的控件

    这篇文章主要为大家详细介绍了Qt编写显示密码强度的控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++实现简单的计算器功能

    C++实现简单的计算器功能

    这篇文章主要为大家详细介绍了C++实现简单的计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • OpenCV+Qt实现图像处理操作

    OpenCV+Qt实现图像处理操作

    这篇文章主要为大家详细介绍了OpenCV+Qt实现图像处理操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论