奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語言

C語言中Swift函數調用實例

時間:2024-09-25 18:04:36 C語言 我要投稿
  • 相關推薦

C語言中Swift函數調用實例

  C語言中調用Swift函數可以通過定義全局的指向Blocks的對象指針來實現,下面是小編分享的實例,一起來看一下吧。

  在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函數調用實例】相關文章:

java調用c函數的實例09-16

在C語言中函數調用方式的區別09-01

C++調用C函數的方法05-21

C語言函數的遞歸調用08-26

C語言函數的運用及調用10-09

Swift與C語言指針結合使用實例09-21

C與C++之間相互調用的實例07-07

C++如何調用matlab函數06-29

C語言中函數的區分08-30

C語言函數的遞歸和調用08-22

主站蜘蛛池模板: 苍南县| 望城县| 咸丰县| 开封县| 英吉沙县| 安乡县| 从江县| 沂源县| 高青县| 南昌县| 广东省| 武汉市| 陇川县| 久治县| 大关县| 贞丰县| 溆浦县| 尉氏县| 新巴尔虎左旗| 林周县| 湘潭县| 日照市| 奉贤区| 外汇| 峨边| 兰州市| 兴业县| 丹凤县| 确山县| 诏安县| 运城市| 盐池县| 惠来县| 神池县| 从化市| 屯留县| 砚山县| 金坛市| 阿克| 惠来县| 河北区|