Swift中如何正確的使用C++

前言

swift作為蘋果的親兒子。吸收了各大語言的優點, 不僅擁有解釋語言的效率,又能直接操作內存,兼容C,接近C語言的性能。
如果能夠在swift中使用c++,那么對于swift來說更是如虎添翼。

搭建環境

可以先下載這個demo
目錄結構大概是這樣的

QQ20170604-155454.png

我們會把c++文件寫在framework中,方便其他的工程去調用。

首先新建一組c++文件:

QQ20170604-155828.png

在Person.hpp中

#ifndef Person_hpp
#define Person_hpp

#include <stdio.h>
#include <iostream>

using namespace std;

class Person {
    
public:
    string name;
    int age;
    bool sex;
    
public:
    //默認構造函數,相當于init
    Person();
    //帶參數的構造函數,相當于帶參數的init
    Person(const char* name , const int age , const bool sex);
    //析構函數,用來釋放資源,相當于deinit
    ~Person();
   
    //自我介紹
    void introduceMySelf();
    
};


#endif /* Person_hpp */

在Person.cpp中實現Person類里面的方法

#include "Person.hpp"

Person::Person(){
    age = 0;
    sex = true;
    name = "who?";
}

Person::Person(const char* name , const int age , const bool sex){
    this->age = age;
    this->sex = sex;
    
    long len = strlen(name);
    char * cpname = new char[len + 1];
    strcpy(cpname, name);
    this->name = cpname;
}

Person::~Person(){
    cout << "person destruct\n";
}

void Person::introduceMySelf(){
    cout << "hello , i am " << name << ", my age is " << age << "year";
    if (sex) {
        cout << "i am boy";
    }else{
        cout << "i am girl";
    }
}
如何在swift中去調用cpp的類了?
首先,在swift中是不能去調用c++的代碼的。但是swift可以調用c代碼的,c可以調用c++。我們可以通過c這個中間代碼,讓swift可以去間接的調用c++。

我們先新建一個C的頭文件:

QQ20170604-162508.png
#ifndef PersonExtern_h
#define PersonExtern_h


#ifdef __cplusplus
extern "C"{
#endif
    //在這里寫上c的代碼
    
    //初始化一個Person的實例
 
#ifdef __cplusplus
}
#endif

#endif /* PersonExtern_h */

#ifdef __cplusplus是個宏定義,表示c++編譯器在這里以c++的方式編譯,c編譯器在這里以c的方式編譯。

QQ20170604-165934.png

讓在Person.cpp 中實現PersonExtern.h聲明的方法:

QQ20170604-170407.png
ps: 因為在c中不能使用c++中的Person類型,所以我們使用通用類型void

接下來就是在swift中調用PersonExtern.h的方法了。

在framework中,我們是不能使用橋接頭文件的方式來調用c文件中的方法。
ps : 在工程中, 我們可以使用橋接頭文件(就是新建oc文件出現了的那個橋接文件)。但是framework中不行。

步驟:

  1. 新建一個module.map
  2. SwiftCppKit


    QQ20170604-202915.png
  3. 在SwiftCppKit -> Build Settings 中搜索 import path
QQ20170604-203052.png
  1. 添加路徑
QQ20170604-203241.png
  1. 新建一個全局頭文件SwiftCpp-PCH.h 在這個全局頭文件中添加我們寫好的c頭文件
QQ20170604-203709.png
  1. 在module.map 中寫上(這個截圖有點小失誤,最后我改成了SwiftCppExtern,這里你寫的SwiftCppExtern在swift文件就import SwiftCppExtern. 寫的SwiftCpp,就import SwiftCpp)
QQ20170604-203941.png
  1. 最后一步 新建一個Person.swift文件 然后在swift文件中 import SwiftCppExtern就可以了
QQ20170604-204315.png

接下來就開始在swift里間接調用c++了

在這之前我們可以


QQ20170604-204907.png

這么做是為了 代碼閱讀更加方便。

1. swift中的代碼(注意寫上open 和 public):

QQ20170604-205537.png

2. 我嘗試在工程中是否能夠使用

QQ20170604-205842.png

3. 接下來嘗試帶參構造器和析構函數

QQ20170604-212419.png

用swift來管理c++的生命周期, 是不是讓c++變簡單了許多

4. 最后在測試一個帶參數的函數

QQ20170604-213505.png

完整的工程在這里,覺得還不錯的話就點個贊吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容