最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • C++開放封閉原則示例解析

    C++開放封閉原則示例解析

    在如那就的設(shè)計模式中,不能修改,但可以擴展的實現(xiàn)是一條十分重要的原則,它是開放-封閉原則(The Open-Clossed Principle,簡稱OCP)或開-關(guān)閉原則
    2023-02-02
  • C++?Boost?Spirit進階教程

    C++?Boost?Spirit進階教程

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C語言中#pragma預處理指令的使用

    C語言中#pragma預處理指令的使用

    在所有的預處理指令中,#pragma指令可能是最復雜的了,它的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作,本文主要介紹了C語言中#pragma預處理指令的使用,感興趣的可以了解一下
    2023-12-12
  • VC6.0代碼自動提示 VC6.0在win7環(huán)境下代碼提示智能化

    VC6.0代碼自動提示 VC6.0在win7環(huán)境下代碼提示智能化

    作為程序猿的你,是否已經(jīng)喜歡或習慣依賴IDE開發(fā)環(huán)境呢,有了IDE環(huán)境,即使你想不起方法全名,只要知道某個前綴,或哪怕在提示列表中,一一查詢,也可以找到自己想找的方法或?qū)傩?/div> 2013-01-01
  • C++中4種類型轉(zhuǎn)換的方法分享

    C++中4種類型轉(zhuǎn)換的方法分享

    這篇文章主要為大家詳細介紹了C++中4種類型轉(zhuǎn)換的方法,文中的示例代碼講解詳細,對我們學習C++有一定的幫助,感興趣的可以了解一下
    2023-04-04
  • C語言各種符號的使用介紹下篇

    C語言各種符號的使用介紹下篇

    C?語言的基本符號就有?20?多個,每個符號可能同時具有多重含義,而且這些符號之間相互組合又使得?C?語言中的符號變得更加復雜起來
    2022-08-08
  • C語言代碼實現(xiàn)俄羅斯方塊

    C語言代碼實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細介紹了C語言代碼實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C語言實現(xiàn)掃雷小游戲

    C語言實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 關(guān)于c語言的一個小bug詳解

    關(guān)于c語言的一個小bug詳解

    以下是對c語言中的一個小bug進行了詳細的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決

    C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決

    這篇文章主要介紹了C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決,文中的題目是將元素連接起來排成一個數(shù)并要求出這類結(jié)果中數(shù)最小的一個,需要的朋友可以參考下
    2016-03-03

最新評論

苍山县| 黑河市| 涟源市| 类乌齐县| 田阳县| 扶绥县| 广灵县| 邵阳县| 徐水县| 沈丘县| 黎城县| 梨树县| 宣恩县| 穆棱市| 祁东县| 阿克苏市| 襄城县| 达孜县| 林芝县| 清镇市| 越西县| 陆川县| 永昌县| 四会市| 阿城市| 方山县| 盱眙县| 乐都县| 鞍山市| 祁阳县| 峨边| 漳浦县| 桑日县| 尤溪县| 娱乐| 明溪县| 永福县| 定襄县| 苍山县| 佛山市| 石嘴山市|