欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中調(diào)用Swift函數(shù)實例詳解

 更新時間:2017年07月24日 15:28:30   作者:zenny_chen  
這篇文章主要介紹了C語言中調(diào)用Swift函數(shù)實例詳解的相關(guān)資料,實現(xiàn)該功能可以通過定義全局的指向Blocks的對象指針來實現(xiàn),需要的朋友可以參考下

C語言中調(diào)用Swift函數(shù)實例詳解

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

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

下面我們創(chuàng)建一個名為SwiftTest的macOS系統(tǒng)上的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中編輯以下內(nèi)容:

// 這里是對SwiftFunc的實現(xiàn)
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()
    }
  }
}

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

以上就是C語言中調(diào)用Swift函數(shù)的介紹,如有疑問可以留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • jquery ready函數(shù)深入分析

    jquery ready函數(shù)深入分析

    本文主要介紹jquery ready,這里整理了相關(guān)資料及相關(guān)示例代碼幫助大家學習參考,有興趣的小伙伴可以參考下
    2016-08-08
  • C++面向?qū)ο笾袠?gòu)造函數(shù)使用詳解

    C++面向?qū)ο笾袠?gòu)造函數(shù)使用詳解

    學習過C語言的小伙伴知道:C語言是面向過程的,關(guān)注的是過程,分析出求解問題的步驟,通過函數(shù)調(diào)用逐步解決問題,這篇文章主要介紹了C++面向?qū)ο笾袠?gòu)造函數(shù)使用
    2022-10-10
  • c語言實現(xiàn)向上取整計算方法

    c語言實現(xiàn)向上取整計算方法

    這篇文章主要介紹了c語言實現(xiàn)向上取整計算方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • c++難以發(fā)現(xiàn)的bug(有趣)

    c++難以發(fā)現(xiàn)的bug(有趣)

    這篇文章主要介紹了c++難以發(fā)現(xiàn)的bug(有趣)的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • 超級詳細講解C++中的多態(tài)

    超級詳細講解C++中的多態(tài)

    多態(tài)是在不同繼承關(guān)系的類對象,去調(diào)同一函數(shù),產(chǎn)生了不同的行為,下面這篇文章主要給大家介紹了關(guān)于C++中多態(tài)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • VS2017中配置QT5.12.0的圖文教程

    VS2017中配置QT5.12.0的圖文教程

    本文主要介紹了VS2017中配置QT5.12.0的圖文教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • c++如何控制對象的創(chuàng)建方式(禁止創(chuàng)建棧對象or堆對象)和創(chuàng)建的數(shù)量

    c++如何控制對象的創(chuàng)建方式(禁止創(chuàng)建棧對象or堆對象)和創(chuàng)建的數(shù)量

    這篇文章主要介紹了c++如何控制對象的創(chuàng)建方式和創(chuàng)建的數(shù)量,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • C/C++中數(shù)據(jù)類型轉(zhuǎn)換詳解及其作用介紹

    C/C++中數(shù)據(jù)類型轉(zhuǎn)換詳解及其作用介紹

    這篇文章主要介紹了C/C++中數(shù)據(jù)類型轉(zhuǎn)換詳解及其作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C語言中定義與聲明有哪些區(qū)別

    C語言中定義與聲明有哪些區(qū)別

    在C/C++中有一個基礎(chǔ)且重要的知識,什么是聲明?什么是定義?他們的區(qū)別是什么?本文將帶你理清其中的區(qū)別
    2022-07-07
  • C++學習進階之Makefile基礎(chǔ)用法詳解

    C++學習進階之Makefile基礎(chǔ)用法詳解

    Makefile 通常指的是一個含有一系列命令(directive)的,通過 Make自動化編譯工具,幫助 C/C++ 程序?qū)崿F(xiàn)自動編譯目標文件的文件,這篇文章主要給大家介紹了關(guān)于C++學習進階之Makefile基礎(chǔ)用法的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評論