超碰免费人人操|国产视频二区久久艹人人操|欧美激情第一页在线|久热最新无码中文视频|91精品国际成人|亚洲成人精品在线视频青青草|久草免费高清完整在线观看|你懂的AV在线日本黄网页|国产黄色AV日韩女同网|欧美成人色区导航片av

C語(yǔ)言中Swift函數(shù)調(diào)用實(shí)例

時(shí)間:2025-07-14 06:20:18 C語(yǔ)言

C語(yǔ)言中Swift函數(shù)調(diào)用實(shí)例

  C語(yǔ)言中調(diào)用Swift函數(shù)可以通過(guò)定義全局的指向Blocks的對(duì)象指針來(lái)實(shí)現(xiàn),下面是小編分享的實(shí)例,一起來(lái)看一下吧。

  在Apple官方的《Using Swift with Cocoa and Objectgive-C》一書中詳細(xì)地介紹了如何在Objective-C中使用Swift的類以及如何在Swift中使用Objective-C中的類。在后半部分也介紹了如何在Swift中使用C函數(shù),不過(guò)對(duì)于如何在C語(yǔ)言中使用Swift函數(shù)卻只字未提。這里我就為大家分享一下如何在C語(yǔ)言中調(diào)用Swift函數(shù)。

  我們首先要知道的是,所有Swift函數(shù)都屬于閉包。其次,Swift函數(shù)的調(diào)用約定與Apple為Clang編譯器貢獻(xiàn)的Blocks語(yǔ)法一致。因此,我們需要通過(guò)使用Blocks調(diào)用約定將Swift函數(shù)導(dǎo)入到C語(yǔ)言中。由于在C語(yǔ)言中無(wú)法直接聲明Blocks調(diào)用約定的函數(shù),因此我們可以通過(guò)定義全局的指向Blocks的對(duì)象指針來(lái)實(shí)現(xiàn)。

  下面我們創(chuàng)建一個(gè)名為SwiftTest的macOS系統(tǒng)上的Swift工程。然后新建一個(gè)名為test.c的C源文件,如果Xcode沒(méi)有彈出是否新建bridging-header文件,那么我們可以新增一個(gè)Objective-C源文件,最后把它給移除。這里,我們必須在工程里包含SwiftTest-Bridging-Header.h這個(gè)頭文件。

  然后我們編輯此頭文件:

  extern void (^ __nonnull SwiftFunc)(void);

  extern void CFuncTest(void);

  這里聲明的全局指向void(^)(void)類型的Block的引用對(duì)象。

  然后我們?cè)倏磘est.c源文件:

  void (^SwiftFunc)(void) = NULL;

  void CFuncTest(void)

  {

  SwiftFunc();

  }

  我們定義SwiftFunc全局對(duì)象,將它初始化為空。

  然后在ViewController.swift中編輯以下內(nèi)容:

  /pic/p>

  private func swiftFuncImpl() {

  print("This is a Swift function!");

  }

  class ViewController: NSViewController {

  override func viewDidLoad() {

  super.viewDidLoad()

  /pic/p>

  SwiftFunc = swiftFuncImpl

  /pic/p>

  dispatch_async(dispatch_get_main_queue()) {

  CFuncTest()

  }

  }

  }

  當(dāng)調(diào)用了test.c中定義的CFuncTest函數(shù)之后,該函數(shù)里將直接調(diào)用SwiftFunc這一Block引用對(duì)象,從而達(dá)到了在C語(yǔ)言中調(diào)用了Swift中函數(shù)的目的。

【C語(yǔ)言中Swift函數(shù)調(diào)用實(shí)例】相關(guān)文章:

java調(diào)用c函數(shù)的實(shí)例12-20

在C語(yǔ)言中函數(shù)調(diào)用方式的區(qū)別01-07

C語(yǔ)言中g(shù)etch()函數(shù)詳解(附實(shí)例)08-15

匯編調(diào)用C函數(shù)02-02

C++調(diào)用C函數(shù)的方法02-28

C/C++函數(shù)調(diào)用的方式12-03

Swift與C語(yǔ)言指針結(jié)合使用實(shí)例12-28

C函數(shù)的調(diào)用過(guò)程02-13

php函數(shù)連續(xù)調(diào)用實(shí)例分析02-19