天天看點

《從零開始學Swift》學習筆記(Day 71)——Swift與C/C++混合程式設計之資料類型映射

原創文章,歡迎轉載。轉載請注明:關東升的部落格 

    如果引入必要的頭檔案,在Objective-C語言中可以使用C資料類型。而在Swift語言中是不能直接使用C資料類型,蘋果公司為Swift語言提供與C語言相對應資料類型。這些類型主要包括:C語言基本資料類型和指針類型。 

C語言基本資料類型

如表所述是Swift資料類型與C語言基本資料類型對應關系表。

《從零開始學Swift》學習筆記(Day 71)——Swift與C/C++混合程式設計之資料類型映射
    Swift語言中的這些資料類型與Swift原生的資料類型一樣都,本質上都是結構體類型。我們可以他們的構造函數建立這些資料類型的執行個體。示例代碼如下: 

var intSwift = 80
 
//int
var intNumber  = NSNumber(int: CInt(intSwift))
 
//unsigned char
varunsignedCharNumber  =NSNumber(unsignedChar: CUnsignedChar(intSwift))
 
//unsigned int
var unsignedIntNumber  = NSNumber(unsignedInt:CUnsignedInt(intSwift))      

    變量intSwift所存儲80是Int類型。代碼中CInt(intSwift)是執行個體化CInt類型,它實作了将Int類型轉化為C語言int類型,在Swift中使用CInt表示。

    代碼中CUnsignedChar(intSwift)是将Int類型轉化為C語言unsigned char類型,在Swift中使用CUnsignedChar表示。

    代碼中的CUnsignedInt(intSwift))是将Int類型轉化為C語言unsigned int類型,在Swift中使用CUnsignedInt表示。 

C語言指針類型

如表所述是Swift資料類型與C語言指針資料類型對應關系表。

《從零開始學Swift》學習筆記(Day 71)——Swift與C/C++混合程式設計之資料類型映射

    從表可見針對C語言多樣的指針形式,Swift主要通過提供了三種不安全的泛型指針類型:UnsafePointer<T>、UnsafeMutablePointer<T>和AutoreleasingUnsafeMutablePointer<T>。T是泛型占位符,表示不同的資料類型。另外,還有COpaquePointer類型是Swift中無法表示的C指針類型。

下面我們分别介紹一下。 

1.UnsafePointer<T>

UnsafePointer<T>是一個比較常用的常量指針類型,這種指針對象需要程式員自己手動管理記憶體,即需要自己申請和釋放記憶體。它一般是由其他的指針建立。它的主要的構造函數有:

  • init(_ other: COpaquePointer)。通過COpaquePointer類型指針建立。
  • init<U>(_ from: UnsafeMutablePointer<U>)。通過UnsafeMutablePointer類型指針建立。
  • init<U>(_ from: UnsafePointer<U>)。通過UnsafePointer類型指針建立。

    UnsafePointer<T>主要的屬性:

  • memory。隻讀屬性,它能夠通路指針指向的内容。

    UnsafePointer<T>主要的方法:

  • successor() -> UnsafePointer<T>。獲得指針指向的下一個記憶體位址的内容。
  • predecessor() -> UnsafePointer<T>。獲得指針指向的上一個記憶體位址的内容。

2. UnsafeMutablePointer<T>

UnsafeMutablePointer<T>是一個比較常用的可變指針類型,這種指針對象需要程式員自己手動管理記憶體,自己負責申請和釋放記憶體。可變指針可以由其他的指針建立,也可以可變指針通過alloc(_:)方法申請記憶體空間,再調用initialize(_:)方法初始化指針指向數值。當指針對象釋放時候需要調用destroy()方法銷毀指針指向對象,它是initialize(_:)方法的反向操作,他們兩個方法在代碼中應該成對出現的。最後還要調用dealloc(_:)方法釋放指針指向的記憶體空間,它是alloc(_:)方法的反向操作,這兩個方法在代碼中也應該成對出現。

3. AutoreleasingUnsafeMutablePointer<T>

AutoreleasingUnsafeMutablePointer<T>被稱為自動釋放指針,在方法或函數中聲明為該類型的參數,是輸入輸出類型的,在調用方法或函數過程中,參數先首先被拷貝到一個無所有權的緩沖區,在方法或函數内使用的這個緩沖區,當方法或函數傳回時,緩沖區資料重新寫回到參數。

歡迎關注關東升新浪微網誌@tony_關東升。

關注智捷課堂微信公共平台,了解最新技術文章、圖書、教程資訊

《從零開始學Swift》學習筆記(Day 71)——Swift與C/C++混合程式設計之資料類型映射

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com

智捷課堂論壇網站:http://51work6.com/forum.php