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

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

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

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

在Apple官方的《Using Swift with Cocoa and Objectgive-C》一書(shū)中詳細(xì)地介紹了如何在Objective-C中使用Swift的類(lèi)以及如何在Swift中使用Objective-C中的類(lèi)。在后半部分也介紹了如何在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)類(lèi)型的Block的引用對(duì)象。

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

void (^SwiftFunc)(void) = NULL;

void CFuncTest(void)
{
  SwiftFunc();
}

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

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

// 這里是對(duì)SwiftFunc的實(shí)現(xiàn)
private func swiftFuncImpl() {
  print("This is a Swift function!");
}

class ViewController: NSViewController {
  
  override func viewDidLoad() {
    super.viewDidLoad()

    // 這里對(duì)定義在test.c中的SwiftFunc進(jìn)行初始化
    SwiftFunc = swiftFuncImpl

    // 這里用dispatch_async來(lái)測(cè)試SwiftFunc是否一直被hold著
    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ǔ)言中調(diào)用Swift函數(shù)的介紹,如有疑問(wèn)可以留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++開(kāi)放封閉原則示例解析

    C++開(kāi)放封閉原則示例解析

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

    C++?Boost?Spirit進(jìn)階教程

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)
    2022-11-11
  • C語(yǔ)言中#pragma預(yù)處理指令的使用

    C語(yǔ)言中#pragma預(yù)處理指令的使用

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

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

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

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

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

    C語(yǔ)言各種符號(hào)的使用介紹下篇

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

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

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

    C語(yǔ)言實(shí)現(xiàn)掃雷小游戲

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

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

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

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

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

最新評(píng)論

梅河口市| 阿瓦提县| 无极县| 温州市| 洛浦县| 商丘市| 萨迦县| 大厂| 奉化市| 瑞安市| 厦门市| 枣阳市| 莲花县| 阳城县| 宜兰县| 罗定市| 信宜市| 通化县| 剑川县| 平武县| 东兰县| 公主岭市| 宁夏| 满洲里市| 西安市| 德昌县| 舟山市| 平凉市| 桂林市| 丁青县| 新密市| 永吉县| 南乐县| 深圳市| 金塔县| 定南县| 日喀则市| 南召县| 溆浦县| 渭源县| 安顺市|