蘋果系統開發中的混合編程(2):Swift和C的相互調用,系統開發swift

來源:互聯網
上載者:User

蘋果系統開發中的混合編程(2):Swift和C的相互調用,系統開發swift
 在進行Swift和C之間的相互調用時,有必要先瞭解一下兩種語言之間的類型轉換關係: 

C 類型 Swift 類型
bool CBool
char, signed char CChar
unsigned char CUnsignedChar
short CShort
unsigned short CUnsignedShort
int CInt
unsigned int CUnsignedInt
long CLong
unsigned long CUnsignedLong
long long CLongLong
unsigned long long CUnsignedLongLong
wchar_t CWideChar
char16_t CChar16
char32_t CChar32
float CFloat
double CDouble
  下在還是先示範一下如何在Swift裡對C的方法進行調用,建立一個Swift的項目:  在項目裡建立C代碼檔案:  這個時候會提示你是否要產生Bridging Header,選擇建立。 

 

檔案建立完成後的代碼結構如下,可以看到有一個檔案名稱為:<工程名>-Bridging-Header.h的檔案,這就是在Swift和C之間進行橋接的檔案。 

 

在項目的配置中可以看到這個橋接檔案是在這裡指定的,所以如果忘記建立了這個檔案也不用擔心,自己建立一個在這裡指定一下就可以了。

 

實現C的代碼: MyCFile.h 

 

MyCFile.c 

 

在橋接檔案中引入C代碼的標頭檔,非常簡單,直接import一下就可以了。 

 

然後在swift檔案中就可以直接調用C的方法: 

 

下面我們再添加一些代碼,來實現兩點:一、C代碼中對Swift代碼的調用二、資料的相互傳遞(以字串為例) MyCFile.h 

 C對Swift方法的調用,其實相當於是註冊一個全域的函數指標,可以參見SwiftCallbackFun的定義。

這個裡面有一些OC的文法:^ 操作符,說明這是一個閉包,也就是Block,Swift裡的函數都是以閉包的形式傳遞進來的。__nonnull 表示對象不應該為空白,因為在混編的時候,Swift編譯器並不知道一個Objective-C對象到底是optional還是non-optional,所以在Xcode 6.3引入了一個Objective-C的新特性:nullability annotations,這裡可以定義為 __nullable 或 __nonnull 。 MyCFile.c這裡有一個對Swift方法的回調。 

 

main.swift

 

Swift裡的代碼,要注意的有兩點:一、在Swift裡對C中傳入字串處理的方式二、要先給全域的Callback賦值,這樣才能從C裡調用到Swift裡的方法。          

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.